Laravel - 雄辩或流利的随机行
如何在Laravel框架中使用Eloquent或Fluent选择随机行?
我知道通过使用SQL,你可以通过RAND()进行排序。但是,我希望在初始查询之前不计算记录数的情况下获取随机行。
有什么想法吗?
如何在Laravel框架中使用Eloquent或Fluent选择随机行?
我知道通过使用SQL,你可以通过RAND()进行排序。但是,我希望在初始查询之前不计算记录数的情况下获取随机行。
有什么想法吗?
拉拉维尔>= 5.2:
User::inRandomOrder()->get();
或获取特定数量的记录
// 5 indicates the number of records
User::inRandomOrder()->limit(5)->get();
// get one random record
User::inRandomOrder()->first();
或使用随机方法进行收集:
User::all()->random();
User::all()->random(10); // The amount of items you wish to receive
拉拉维尔 4.2.7 - 5.1:
User::orderByRaw("RAND()")->get();
拉拉维尔 4.0 - 4.2.6:
User::orderBy(DB::raw('RAND()'))->get();
拉拉维尔3:
User::order_by(DB::raw('RAND()'))->get();
查看有关MySQL随机行的这篇文章。Laravel 5.2支持这一点,对于旧版本,没有比使用RAW查询更好的解决方案了。
编辑 1:正如Double Gras所提到的,自此更改以来,orderBy()不允许ASC或DESC以外的任何其他内容。我相应地更新了我的答案。
编辑 2:Laravel 5.2 最终为此实现了一个包装器函数。它被称为 inRandomOrder()。。
这工作得很好,
$model=Model::all()->random(1)->first();
您还可以更改随机函数中的参数以获取多条记录。
注意:如果您有大量数据,不建议这样做,因为这将首先获取所有行,然后返回随机值。