雄辩地将十进制转换为字符串

2022-08-30 15:56:30

我有一个十进制字段来表示我的雄辩模型中的钱,当我试图向这个字段添加一些数字时,我注意到错误的结果。

经过进一步的检查,我发现十进制字段被转换为字符串,就像在修补器控制台中一样。"1245114.00"

我检查了表结构,我可以验证该字段确实是.decimal(11,3)

这个问题以前问过,但没有答案。

为什么会发生这种情况?


答案 1

您需要在模型中定义哪些字段需要强制转换为基元属性。

protected $casts = [
    'my_decimal' => 'float',
];

模型上的属性提供了一种将属性转换为常见数据类型的便捷方法。该属性应该是一个数组,其中键是要强制转换的属性的名称,值是要将列强制转换为的类型。支持的强制转换类型包括:、、、、和$casts$castsintegerrealfloatdoublestringbooleanobjectarraycollectiondatedatetimetimestamp

这里有一个非常好的解释:

https://mattstauffer.com/blog/laravel-5.0-eloquent-attribute-casting/

文档中还有一个解释:

https://laravel.com/docs/5.5/eloquent-mutators#attribute-casting


答案 2

根据Laravel的github存储库上的这个帖子:https://github.com/laravel/framework/issues/11780

这似乎是 PDO 驱动程序问题。自动将小数转换为字符串。该线程中的人说这是mysql 5.2驱动程序的问题,有些人回滚到5.1。如果您在自己的服务器上,则可以降级。否则,您必须将其投射到模型级别上浮动。


推荐