Laravel - 用Eloquent或Fluent生成随机行。
Laravel - 用Eloquent或Fluent生成随机行。
在Laravel框架中,我该如何使用Eloquent或Fluent选取一行随机数据?
我知道可以通过使用SQL的RAND()函数来实现,但我想要在不需要在初始查询之前计算记录数的情况下得到随机行。
有什么好的想法吗?
admin 更改状态以发布 2023年5月22日
Laravel >= 5.2:
User::inRandomOrder()->get();
或获取特定数量的记录
// 5 indicates the number of records User::inRandomOrder()->limit(5)->get(); // get one random record User::inRandomOrder()->first();
或使用集合的random方法:
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();
Laravel 3:
User::order_by(DB::raw('RAND()'))->get();
请查看关于MySQL随机行的这篇文章。Laravel 5.2支持此功能,而旧版本则没有比使用原始查询更好的解决方案。
编辑 1:如Double Gras所提到的,在此次更改之后,orderBy()只允许使用ASC或DESC。我相应地更新了我的答案。
编辑 2:Laravel 5.2最终实现了一个包装函数。它叫做inRandomOrder()。