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

如何强制Laravel返回符合正确数据类型的JSON响应

解决方案
  • 首选方案:在对应模型中配置$casts属性
    这是Laravel官方推荐的字段类型转换方案,作用于模型所有查询场景,配置一次全局生效。在你的MyModel类中添加以下代码:
class MyModel extends Model
{
    // 已有模型代码

    protected $casts = [
        'lang_id' => 'integer', // 强制转为整数类型
        'open_on_smalldevice' => 'boolean', // 强制转为布尔类型,自动将1转true、0转false
    ];
}

默认Laravel只会对主键id自动配置整数类型转换,其余自定义整数字段都需要手动指定转换规则。

  • 全局修复PDO字符串化问题
    如果项目中大量模型都出现整数字段返回字符串的情况,大概率是PHP PDO配置开启了结果字符串化,你可以在config/database.php的MySQL连接配置项中修改PDO参数:
'mysql' => [
    // 已有数据库配置项
    'options' => [
        PDO::ATTR_STRINGIFY_FETCHES => false, // 关闭查询结果自动字符串化
        PDO::ATTR_EMULATE_PREPARES => false, // 关闭模拟预处理,避免底层类型转换异常
    ],
]

修改配置后记得清空配置缓存或重启服务生效。

  • 临时处理方案(不推荐)
    如果只需要在当前接口临时调整类型,可以在查询后通过集合遍历修改字段类型:
public function list(Request $request)
{
    return MyModel::whereIsPublic(true)
        ->get()
        ->map(function ($item) {
            $item->lang_id = (int) $item->lang_id;
            $item->open_on_smalldevice = (bool) $item->open_on_smalldevice;
            return $item;
        });
}

这个方法只对当前接口生效,复用性差,仅适合临时调试使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 12:36:03