【问题标题】:Append array to JSON column to multiple rows at once一次将数组追加到 JSON 列到多行
【发布时间】:2021-08-30 18:24:43
【问题描述】:

我在数据库中有一个列类型 JSON,我正在对多行执行更新。

例如,这个查询

Model::whereIn('id',$ids)->update([
   'status' => 'canceled'
]);

而且这个表还有另外一列叫history(JSON类型),每一行在JSON中已经有自己的历史了。

如何附加到它们中的每一个?比如这个数组

[
   'user_id' => '144',
   'action'  => 'cancel',
   'at'      => '2021 - 08 - 30'
]

我的想法和问题,有没有类似的东西

Model::whereIn( 'id', $ids )->appendJson('field_name',$array);

【问题讨论】:

    标签: php mysql laravel eloquent


    【解决方案1】:

    最简单的方法可能是这样的:

    $status = 'canceled';
    $extraHistoryData = [...];
    
    Model::whereKey($ids)->get(function ($model) use ($status, $extraHistoryData) {
        $history = $model->history;
    
        $history = array_merge($history, $extraHistoryData);
    
        $model->update(compact('status', 'history'));
    });
    

    如果您想在单个查询中更新所有行,我能得到的最接近的是thread。但这不太可能解决您的问题。

    【讨论】:

      猜你喜欢
      • 2018-10-29
      • 2015-09-15
      • 2015-11-12
      • 1970-01-01
      • 2017-12-14
      • 2016-06-22
      • 1970-01-01
      • 1970-01-01
      • 2021-11-02
      相关资源
      最近更新 更多