对于 动态 中支持的列Maria-DB 并在 MySQL 我们有 JSON 列类型。对于我们的一个项目,我们应该为 实现一个数据库。 Maria-DB (不是 Mysql )。
动态专栏支持使用 yii2-dynamic-ar
包裹。
怎样才能覆盖Eloquent
orm 在 Laravel
添加 dynamic-columns
.在 Yii
将此功能添加到 ActiveRecord
的软件包这个类可以覆盖 ActiveRecord
类(class)Yii
中的实现类支持的框架 ActiveRecord
ORM:
最佳答案
我刚刚使用 eloquent 和查询构建器创建了用于处理 MariaDB 动态列的包。
要安装软件包,请运行以下命令:
composer require halalsoft/laravel-dynamic-column
您可以通过添加 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,
];
}
现在您可以使用 eloquent 或查询构建器使用像 json 列这样的动态列:$modelData = MyModel::find(1);
$columnData = $modelData->the_column;
$columnData['data1'] = 'value';
$columnData['data2'] = 'value2';
$modelData->the_column = $columnData;
$modelData->save();
您还可以将数据字段创建为数组$newData = MyModel::create([
'other_column' => 'this just another column data',
'the_column' => ['data1'=>'value1','data2'=>'value2']
]);
要更新您使用的 json 字段/键,您可以使用 ->
调用更新方法时的运算符:$page->update(['content->data1' => 'value1new']);
或者您仍然可以使用普通数组更新整列:$page->update(['content' => ['data1'=>'value1new','data2'=>'value2new']]);
您可以使用其他方法设置为数组,例如 updateOrCreate()
, firstOrCreate()
, 等等。这个包还支持查询生成器使用:
Model::query()->where('the_column->data1', 'value1')->first();
此软件包仍然是新的,如果有任何问题或请求,请转至 github issue
关于mysql - Laravel Eloquent 支持 MariaDb 动态列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65508697/