为什么要在Eloquent ORM中改变价值?

时间:2017-10-27 08:31:20

标签: php laravel laravel-5

我在Laravel选择查询中遇到小拼图问题。它自动更改数据类型。

当我使用

$data = Model::select('user_id AS id')->get(); 

数据为[{"id":3},{"id":4}] // not actual value

但当我使用时(仅将别名 ID 更改为 ID

$data = Model::select('user_id AS ID')->get(); 

数据为[{"ID":"03"},{"ID":"04"}] // actual value

问题是什么

1 个答案:

答案 0 :(得分:3)

这是因为Laravel自动将id字段转换为整数,因为它将是模型的主键。

  

主键

     

Eloquent还会假设每个表都有一个名为id的主键列。您可以定义受保护的$ primaryKey属性来覆盖此约定。

     

此外,Eloquent假定主键是递增的整数值,这意味着默认情况下主键将自动转换为int。如果要使用非递增或非数字主键,则必须将模型上的public $ incrementing属性设置为false。如果主键不是整数,则应将模型上的protected $ keyType属性设置为string。

laravel.com/docs/5.5/eloquent

如果您希望将属性ID设置为整数,则可以使用Eloquent的属性强制转换:

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