Laravel如何用Eloquent无需预取值向JSON列内数组插入元素?
你可以通过MySQL原生的JSON函数配合Eloquent的DB::raw实现单语句更新,不需要提前读取JSON字段的值,全程只有一次数据库写操作。
注意:你提到的JSON_ARRAY_APPEND是往数组尾部追加元素,要实现头部插入,应该用JSON_ARRAY_INSERT指定插入到数组索引0的位置即可。
实现代码
首先确保你的User模型已经正确配置了JSON字段的类型转换:
// App/Models/User.php protected $casts = [ 'parameters' => 'array', ];
然后执行更新操作:
use Illuminate\Support\Facades\DB; User::first()->update([ 'parameters' => DB::raw("JSON_ARRAY_INSERT(parameters, '$.pins[0]', 2)") ]);
补充说明
- 如果需要往pins数组尾部追加元素,才需要用到你提到的
JSON_ARRAY_APPEND,写法如下:DB::raw("JSON_ARRAY_APPEND(parameters, '$.pins', 2)") - 该写法仅在使用MySQL作为数据库时生效,兼容MySQL 5.7及以上版本。
内容的提问来源于stack exchange,提问作者Ali
相关产品推荐
相关产品推荐

