对于在Maria-DB和MySQL中支持的动态列,我们有JSON列类型。对于我们的一个项目,我们应该为Maria-DB (而不是Mysql)实现一个数据库。
使用包支持动态列。
如何可以覆盖Eloquent或Laravel中添加dynamic-columns。在将此特性添加到Yii中的ActiveRecord包中,该类可以覆盖ActiveRecord类
在Yii框架中实现类以在ActiveRecord ORM中支持:
发布于 2021-02-10 20:18:38
我刚刚创建了用于使用雄辩和查询生成器处理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列一样的动态列,使用雄辩的或查询构建器:
$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字段/键,可以在调用update方法时使用->操作符:
$page->update(['content->data1' => 'value1new']);或者仍然可以使用普通数组更新整个列:
$page->update(['content' => ['data1'=>'value1new','data2'=>'value2new']]);您可以使用其他方法(如updateOrCreate()、firstOrCreate()等)将数组设置为数组。
此包还支持使用以下方法的查询生成器:
Model::query()->where('the_column->data1', 'value1')->first();这个包仍然是新的,如果有任何问题或请求,请转到github问题
发布于 2020-12-30 21:53:01
可以为Model类中的列定义强制转换
//Model class
protected $casts = ['my_column' => 'array];您可以将列的数据类型定义为文本(如果需要的话)或json,在定义了强制转换后,您将能够将列数据作为关联数组处理。
还有一个包可以在mariadb的迁移中添加json数据类型--它可能有助于https://github.com/ybr-nx/laravel-mariadb
https://stackoverflow.com/questions/65508697
复制相似问题