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
相关产品推荐
相关产品推荐

