雄辩地将十进制转换为字符串
我有一个十进制字段来表示我的雄辩模型中的钱,当我试图向这个字段添加一些数字时,我注意到错误的结果。
经过进一步的检查,我发现十进制字段被转换为字符串,就像在修补器控制台中一样。"1245114.00"
我检查了表结构,我可以验证该字段确实是.decimal(11,3)
这个问题以前问过,但没有答案。
为什么会发生这种情况?
我有一个十进制字段来表示我的雄辩模型中的钱,当我试图向这个字段添加一些数字时,我注意到错误的结果。
经过进一步的检查,我发现十进制字段被转换为字符串,就像在修补器控制台中一样。"1245114.00"
我检查了表结构,我可以验证该字段确实是.decimal(11,3)
这个问题以前问过,但没有答案。
为什么会发生这种情况?
您需要在模型中定义哪些字段需要强制转换为基元属性。
protected $casts = [
'my_decimal' => 'float',
];
模型上的属性提供了一种将属性转换为常见数据类型的便捷方法。该属性应该是一个数组,其中键是要强制转换的属性的名称,值是要将列强制转换为的类型。支持的强制转换类型包括:、、、、和
$casts
$casts
integer
real
float
double
string
boolean
object
array
collection
date
datetime
timestamp
这里有一个非常好的解释:
https://mattstauffer.com/blog/laravel-5.0-eloquent-attribute-casting/
文档中还有一个解释:
https://laravel.com/docs/5.5/eloquent-mutators#attribute-casting
根据Laravel的github存储库上的这个帖子:https://github.com/laravel/framework/issues/11780
这似乎是 PDO 驱动程序问题。自动将小数转换为字符串。该线程中的人说这是mysql 5.2驱动程序的问题,有些人回滚到5.1。如果您在自己的服务器上,则可以降级。否则,您必须将其投射到模型级别上浮动。