在laravel中没有像预期的那样工作

时间:2016-08-09 17:23:17

标签: php laravel laravel-5

继我的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()

但是,当只选择一个随机用户时,如何才能使这项工作,为什么要返回整个表?

2 个答案:

答案 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