Laravel中能否设置JSON嵌套值后用->save()保存模型?
JSON嵌套字段赋值与模型保存的实现方法
可以通过类似mymodel->myjsoncolumn->foo->bar = 123的方式设置JSON嵌套字段值并保存,但必须先在模型中对JSON字段配置类型转换(Cast),否则无法正确生效。
正确操作步骤与语法
配置模型字段类型转换
在你的模型类中定义$casts属性,将JSON字段指定为array或object类型:class MyModel extends Model { protected $casts = [ 'myjsoncolumn' => 'array', // 推荐用数组类型,更灵活 // 或者 'myjsoncolumn' => 'object' ]; }赋值与保存的具体写法
当字段被cast为
object时:// 确保嵌套层级已初始化(避免未定义属性报错) if (!isset($mymodel->myjsoncolumn->foo)) { $mymodel->myjsoncolumn->foo = new \stdClass(); } // 赋值嵌套字段 $mymodel->myjsoncolumn->foo->bar = 123; // 保存模型 $mymodel->save();当字段被cast为
array时(更推荐):
直接通过数组下标修改,无需提前初始化层级:$mymodel->myjsoncolumn['foo']['bar'] = 123; $mymodel->save();也可以用Laravel的
array_set辅助函数简化层级赋值:array_set($mymodel->myjsoncolumn, 'foo.bar', 123); $mymodel->save();
关键注意事项
- 若未配置
$casts,JSON字段会被当作普通字符串处理,直接修改嵌套值不会同步到数据库。 - 使用数组类型转换时,Laravel会自动完成数组与JSON字符串的双向转换,无需手动序列化/反序列化。
内容的提问来源于stack exchange,提问作者DevonDahon
相关产品推荐
相关产品推荐

