Laravel Eloquent 支持 MariaDb 动态列
Laravel Eloquent supporting MariaDb dynamic column
对于 Dynamic 列在 Maria-DB 和 MySQL 中支持我们有 JSON 列类型。对于我们的一个项目,我们应该为 Maria-DB(而不是 Mysql)实施一个数据库。
使用 yii2-dynamic-ar
包支持 动态列。
如何覆盖 Laravel
中的 Eloquent
orm 以添加 dynamic-columns
。在 Yii
包中将此功能添加到 ActiveRecord
这个 classes 可以覆盖 ActiveRecord
class
class 在 Yii
框架中实现以在 ActiveRecord
ORM 中支持:
您可以为模型中的列定义一个转换 class
//Model class
protected $casts = ['my_column' => 'array];
如果需要,您可以将列的数据类型定义为文本,或者 json,定义转换后,您将能够将列数据作为关联数组使用。
还有一个包可以在 mariadb 的迁移中添加 json 数据类型 - 它可能会有帮助
https://github.com/ybr-nx/laravel-mariadb
我刚刚使用 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,
];
}
现在您可以使用动态列,例如 json 列,使用 eloquent 或查询构建器:
$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 field/key,你可以在调用更新方法时使用->
运算符:
$page->update(['content->data1' => 'value1new']);
或者您仍然可以使用普通数组更新整列:
$page->update(['content' => ['data1'=>'value1new','data2'=>'value2new']]);
您可以使用 updateOrCreate()
、firstOrCreate()
等其他方法设置为数组
此包还支持查询生成器使用:
Model::query()->where('the_column->data1', 'value1')->first();
这个包还是新的,如果有任何问题或要求,请转到github issue
对于 Dynamic 列在 Maria-DB 和 MySQL 中支持我们有 JSON 列类型。对于我们的一个项目,我们应该为 Maria-DB(而不是 Mysql)实施一个数据库。
使用 yii2-dynamic-ar
包支持 动态列。
如何覆盖 Laravel
中的 Eloquent
orm 以添加 dynamic-columns
。在 Yii
包中将此功能添加到 ActiveRecord
这个 classes 可以覆盖 ActiveRecord
class
class 在 Yii
框架中实现以在 ActiveRecord
ORM 中支持:
您可以为模型中的列定义一个转换 class
//Model class
protected $casts = ['my_column' => 'array];
如果需要,您可以将列的数据类型定义为文本,或者 json,定义转换后,您将能够将列数据作为关联数组使用。
还有一个包可以在 mariadb 的迁移中添加 json 数据类型 - 它可能会有帮助 https://github.com/ybr-nx/laravel-mariadb
我刚刚使用 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,
];
}
现在您可以使用动态列,例如 json 列,使用 eloquent 或查询构建器:
$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 field/key,你可以在调用更新方法时使用->
运算符:
$page->update(['content->data1' => 'value1new']);
或者您仍然可以使用普通数组更新整列:
$page->update(['content' => ['data1'=>'value1new','data2'=>'value2new']]);
您可以使用 updateOrCreate()
、firstOrCreate()
等其他方法设置为数组
此包还支持查询生成器使用:
Model::query()->where('the_column->data1', 'value1')->first();
这个包还是新的,如果有任何问题或要求,请转到github issue