mysql - Laravel Eloquent 支持 MariaDb 动态列

标签 mysql sql laravel yii2

对于 动态 中支持的列Maria-DB 并在 MySQL 我们有 JSON 列类型。对于我们的一个项目,我们应该为 实现一个数据库。 Maria-DB (不是 Mysql )。
动态专栏支持使用 yii2-dynamic-ar 包裹。
怎样才能覆盖Eloquent orm 在 Laravel添加 dynamic-columns .在 Yii将此功能添加到 ActiveRecord 的软件包这个类可以覆盖 ActiveRecord类(class)Yii 中的实现类支持的框架 ActiveRecord ORM:

  • DynamicActiveRecord.php
  • DynamicActiveQuery.php
  • 最佳答案

    我刚刚使用 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/

    相关文章:

    sql - 如果表存在则执行 select 语句

    php - 无法为 api 路由 laravel 设置 cookie

    php - Laravel 查询运行两次

    mysql - 比特纳米。重置mysql根密码

    javascript - 模块名称 "mysql"尚未加载上下文 : _. 使用 require([]) http ://requirejs. org/docs/errors.html#notloaded

    java - 如何使用 Spring Data @query 注释从 mysql 数据库中仅获取 80 行?

    java - 日期格式 SQL

    mysql - 如何停止对忽略的插入进行自动递增,这些插入不会对 MySQL 进行任何更改?

    php - 如何在 Laravel 5 中使用 AJAX 发送数据?

    mysql - 多个投票选项存储在 MySQL 表中