如何在 Laravel 框架中使用 Eloquent 或 Fluent 选择随机行?
我知道通过使用 SQL,您可以通过 RAND() 进行排序。但是,我想在 不 计算初始查询之前的记录数的情况下获得随机行。
有任何想法吗?
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() 。