继我的previous question之后,我需要从模型中获取一组随机ID列表,我这样做:
User::all('id')->random(2)->pluck('id')->toArray()
以上按预期工作,拔出2个ID并将它们放在一个数组中:
array:2 [
0 => 63
1 => 270
]
当我将它切换到一个随机用户时:
User::all('id')->random(1)->pluck('id')->toArray()
返回整个表格。
array:200 [
0 => 63
1 => 270
2 => 190
...
]
我的计划是使用以下内容来获得1到10个用户:
User::all('id')->random(rand(1,10))->pluck('id')->toArray()
但是,当只选择一个随机用户时,如何才能使这项工作,为什么要返回整个表?
答案 0 :(得分:1)
random(1)
将不会返回集合,而random(2)
及更高版本将会返回。您可以先获取查询,然后根据结果是否为集合以不同方式处理结果。
答案 1 :(得分:1)
您可以使用数据库随机化用户,并充分利用查询构建器及其take
方法。
User::inRandomOrder()
->take(rand(1,10))
->pluck('id')
->toArray();
Laravel 5.2+中添加了 inRandomOrder
,所以如果你有更少,你可以为MySQL做orderBy(DB::raw('RAND()'))
(参见这篇文章了解更多Laravel - Eloquent or Fluent random row)