我在项目中使用Laravel 5.8。我想获得一个带有表“ id”的数组。因此,我使用Laravel Collection - pluck method解决了这个问题。
这是我的数据库。
App\User::pluck('id')->all()
=> [3,1,4,2]
为什么它不返回[1、2、3、4]?
所以我尝试了App\User::all()->pluck('id')
哇,它返回了[1、2、3、4]。
第二个为什么起作用?
答案 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();