You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel中能否设置JSON嵌套值后用->save()保存模型?

JSON嵌套字段赋值与模型保存的实现方法

可以通过类似mymodel->myjsoncolumn->foo->bar = 123的方式设置JSON嵌套字段值并保存,但必须先在模型中对JSON字段配置类型转换(Cast),否则无法正确生效。

正确操作步骤与语法

  1. 配置模型字段类型转换
    在你的模型类中定义$casts属性,将JSON字段指定为array或object类型:

    class MyModel extends Model
    {
        protected $casts = [
            'myjsoncolumn' => 'array', // 推荐用数组类型,更灵活
            // 或者 'myjsoncolumn' => 'object'
        ];
    }
    
  2. 赋值与保存的具体写法

    • 当字段被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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 07:23:12