Lui*_*noz 19
您需要在模型中定义哪些字段需要转换为基本属性.
protected $casts = [
'my_decimal' => 'float',
];
Run Code Online (Sandbox Code Playgroud)
$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
小智 7
根据Laravel的github仓库上的这个线程:https : //github.com/laravel/framework/issues/11780
这似乎是PDO驱动程序问题。自动将小数转换为字符串。那个线程中的人说这是mysql 5.2驱动程序的问题,有的回滚到5.1。如果您在自己的服务器上,则可以降级。否则,您将不得不将其强制转换为浮动在模型级别。
我刚刚花了一些时间分析这个问题,因为我的 Laravel 模型将数据库十进制列显示为字符串。
重要的是,在模型中添加类型转换以浮动确实可以修复它,但如果您像我一样,您会注意到dd(\App\SomeModel::someScope()->get());在模型中添加类型转换后仍然将这些小数列显示为字符串。
当这些值发送到客户端时,它们是整数,因此类型转换确实解决了原始问题,从而允许我的 JavaScript 接收Numbernot String。
我只是做出这个答案,这样人们就不会因为专注于dd()输出而浪费时间。我研究了有关 PDO 驱动程序的解决方案,虽然有些可能有优点,但这并不是什么大问题,因为真正的数据库输出被转换为正确的类型。
| 归档时间: |
|
| 查看次数: |
9178 次 |
| 最近记录: |