如何使用Eloquent更新JSON字段?字段已转换为数组
如何用Eloquent更新已转为数组的JSON字段
以下是几种可行的解决方案,既能避免覆盖原有JSON数据,也无需将字段设为可批量赋值:
方法一:使用属性点语法直接修改(Laravel 5.5+)
如果模型已通过$casts将myField转换为数组/JSON类型,可直接通过对象属性的点语法修改指定键,再保存模型:
$myModel = MyModel::find($your_model_id); $myModel->myField->some = 'value'; // 嵌套结构也支持:$myModel->myField->nested_key->sub_key = 'new_value'; $myModel->save();
这种方式只会修改指定键,不会清除其他JSON数据。
方法二:使用update方法配合JSON字段表达式
无需将myField加入$fillable,直接通过update方法的JSON键路径语法更新,Laravel会自动生成JSON_SET类SQL语句:
MyModel::where('id', $your_model_id)->update([ 'myField->some' => 'value' ]);
适合无需先取出模型实例的场景,直接执行更新操作。
方法三:手动合并数组后赋值
如果需要一次性更新多个键,可以先取出原有JSON数组,合并新数据后再赋值保存:
$myModel = MyModel::find($your_model_id); $myModel->myField = array_merge( $myModel->myField, [ 'some' => 'value', 'another_key' => 'new_value' ] ); $myModel->save();
注意确保myField已被正确转换为数组(通过模型的$casts配置:protected $casts = ['myField' => 'array'];)。
内容的提问来源于stack exchange,提问作者panthro
相关产品推荐
相关产品推荐

