Laravel - 雄辩或流利的随机行

2022-08-30 05:59:46

如何在Laravel框架中使用Eloquent或Fluent选择随机行?

我知道通过使用SQL,你可以通过RAND()进行排序。但是,我希望在初始查询之前不计算记录数的情况下获取随机行。

有什么想法吗?


答案 1

拉拉维尔>= 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()。


答案 2

这工作得很好,

$model=Model::all()->random(1)->first();

您还可以更改随机函数中的参数以获取多条记录。

注意:如果您有大量数据,不建议这样做,因为这将首先获取所有行,然后返回随机值。


推荐