小编典典

Laravel - Eloquent 或 Fluent 随机行

all

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

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

有任何想法吗?


阅读 108

收藏
2022-04-07

共1个答案

小编典典

Laravel >= 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

Laravel 4.2.7 - 5.1:

User::orderByRaw("RAND()")->get();

Laravel 4.0 - 4.2.6:

User::orderBy(DB::raw('RAND()'))->get();

拉拉维尔 3:

User::order_by(DB::raw('RAND()'))->get();

查看 这篇 关于 MySQL 随机行的文章。Laravel 5.2
支持这一点,对于旧版本,没有比使用RAW Queries更好的解决方案。

编辑 1:正如 Double Gras 所提到的, orderBy()
自此
更改以来不允许除
ASC 或 DESC 之外的任何其他内容。我相应地更新了我的答案。

编辑 2: Laravel 5.2
最终为此实现了一个包装函数。它被称为 inRandomOrder()

2022-04-07