Laravel pluck没有将排序数组作为数据库返回

时间:2019-10-24 15:43:29

标签: laravel

我在项目中使用Laravel 5.8。我想获得一个带有表“ id”的数组。因此,我使用Laravel Collection - pluck method解决了这个问题。

这是我的数据库。

enter image description here

App\User::pluck('id')->all() 

=> [3,1,4,2]

为什么它不返回[1、2、3、4]? 所以我尝试了App\User::all()->pluck('id') 哇,它返回了[1、2、3、4]。

第二个为什么起作用?

2 个答案:

答案 0 :(得分:3)

这两个查询结果的差异是由您要使用数据的口才解释引起的。在这两种情况下,针对数据库运行的查询都是不受约束的select语句,如果先运行pluck,则仅选择id字段;如果先运行all(),则选择所有字段。

从mysql返回的结果没有默认顺序。如果您未在SQL查询中指定顺序,请SQL decides the order the records are returned in and it is inconsistent and non-determinant

因此,在第一个示例中,结果以MySQL决定的顺序返回,并立即添加到数组中,因为这就是您要的全部。数组值的顺序与从SQL查询返回的值相同。

在第二个示例中,Eloquent将其从数据库中获取的值转换为User::class的实例,并将它们放入一个集合中。当一个雄辩的集合包含模型实例时,除非您另外指定,否则它将按id排序。然后,您执行pluck方法,该方法仅捕获id并将它们保持相同的顺序。

答案 1 :(得分:0)

App\User::select('id')->orderBy('id')->get();