Laravel Eloquent 支持 MariaDb 动态列

Dol*_*rma 7 mysql sql laravel yii2

对于Maria-DBMySQL 中支持的动态列,我们有 JSON 列类型。对于我们的一个项目,我们应该为Maria-DB(而不是Mysql)实现一个数据库。

动态列是使用负载yii2-dynamic-ar包。

如何覆盖EloquentormLaravel以添加dynamic-columns. 在Yii将此功能添加到ActiveRecord此类的包中可以覆盖ActiveRecord

Yii框架中的实现类以支持ActiveRecordORM:

  1. 动态活动记录.php
  2. 动态ActiveQuery.php

Muh*_*kur 5

我刚刚使用 eloquent 和查询构建器创建了用于处理 MariaDB 动态列的包。

要安装软件包,请运行以下命令:

composer require halalsoft/laravel-dynamic-column
Run Code Online (Sandbox Code Playgroud)

您可以通过添加HasDynamicColumn特征来开始使用该包,并将其Dynamic用作模型的属性转换。

一个例子:

use Illuminate\Database\Eloquent\Model;
use Halalsoft\LaravelDynamicColumn\Dynamic;
use Halalsoft\LaravelDynamicColumn\HasDynamicColumn;

class MyModel extends Model
{
    use HasDynamicColumn;
    protected $casts
        = [
            'the_column' => Dynamic::class,
        ];
}
Run Code Online (Sandbox Code Playgroud)

现在您可以使用 eloquent 或查询构建器使用像 json 列这样的动态列:

$modelData = MyModel::find(1);

$columnData = $modelData->the_column;

$columnData['data1'] = 'value';
$columnData['data2'] = 'value2';


$modelData->the_column = $columnData;

$modelData->save();
Run Code Online (Sandbox Code Playgroud)

您还可以将数据字段创建为数组

$newData = MyModel::create([
    'other_column' => 'this just another column data',
    'the_column' => ['data1'=>'value1','data2'=>'value2']
]);
Run Code Online (Sandbox Code Playgroud)

要更新您使用的 json 字段/键,您可以->在调用 update 方法时使用运算符:

$page->update(['content->data1' => 'value1new']);
Run Code Online (Sandbox Code Playgroud)

或者您仍然可以使用普通数组更新整列:

$page->update(['content' => ['data1'=>'value1new','data2'=>'value2new']]);
Run Code Online (Sandbox Code Playgroud)

可以使用作为阵列设置其他方法等updateOrCreate()firstOrCreate()等。

这个包还支持查询生成器使用:

Model::query()->where('the_column->data1', 'value1')->first();
Run Code Online (Sandbox Code Playgroud)

这个包仍然是新的,如果有任何问题或请求,请转到github issue