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

Laravel中Decimal类型字段被转为String,$cast配置不生效如何解决

问题解决:MySQL decimal字段Laravel模型类型转换不生效返回字符串

1. 优先排查属性拼写错误

Laravel框架中负责类型转换的模型属性为复数形式的$casts,你给出的示例代码中使用了单数$cast,这是该类问题最常见的诱因:

// 错误写法
protected $cast = [
    'temperature' => 'float'
];

// 正确写法
protected $casts = [
    'temperature' => 'float',
    // 若需要保留两位小数也可使用decimal格式声明
    // 'temperature' => 'decimal:2'
];

2. 拼写无误仍不生效的处理方案

  • 确认temperature字段没有被自定义访问器(getTemperatureAttribute)、修改器或者全局查询作用域覆盖返回值
  • MySQL PDO驱动默认会将DECIMAL类型字段以字符串格式返回,目的是避免浮点数精度丢失,如果$casts配置生效后仍需要强制返回数值类型,可额外添加访问器手动转换:
public function getTemperatureAttribute($value)
{
    // 转换为float类型返回
    return (float) $value;
    // 需固定两位小数可使用round方法
    // return round((float)$value, 2);
}
  • Laravel 8及以上版本可使用新版属性声明语法实现类型转换,避免访问器重名冲突

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 00:36:03