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

TCA类型为json的字段,PHP模型中应定义何种正确类型?

正确的Model属性类型配置方案

你的数据库字段是json类型,对应的Model属性应该定义为array类型,但必须配合Laravel的$casts属性做自动序列化/反序列化处理,这才是解决你遇到问题的关键。

具体操作步骤:

  1. 添加$casts配置到Model
    在你的Model类中新增$casts数组,明确指定question_options字段对应array类型:

    protected $casts = [
        'question_options' => 'array',
    ];
    
  2. 修正属性类型注释
    属性的@var标注直接写array即可,因为$casts会自动把数据库里的JSON字符串转换成PHP数组,保存时再自动转回JSON:

    /**
     * questionOptions
     *
     * @var array
     */
    protected $questionOptions;
    

为什么之前的方式出问题:

  • 只定义array类型但没加$casts:Laravel不会自动把数据库中的JSON字符串反序列化为PHP数组,读取时自然会显示null或者原始的JSON字符串,导致异常。
  • 用string类型:设置数组值时,Laravel会把数组当作普通字符串处理,要么转成"Array"这种无效内容,要么给JSON字符串额外添加转义符,导致存储的数据不符合预期。

注意事项:

如果你的Model自定义了访问器(getter)或修改器(setter),要确保这些方法的逻辑和$casts的自动处理不冲突——比如不要在setter里手动序列化数组,$casts已经帮你做了这件事。

内容的提问来源于stack exchange,提问作者Doku

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 03:40:54