如何在Laravel框架中使用Eloquent或Fluent选择随机行?
我知道通过使用SQL,您可以通过RAND()进行订购。但是,我想在 不 计算初始查询之前的记录数的 情况下 获得随机行。
有任何想法吗?
Laravel > = 5.2:
User::all()->random(); User::all()->random(10); // The amount of items you wish to receive
要么
User::inRandomOrder()->get();
或获取特定记录数
//5 indicates the number of records User::inRandomOrder()->limit(5)->get();
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随机行的 本文 。Laravel5.2支持这一点,对于较旧的版本,没有比使用RAWQueries更好的解决方案了。
编辑1: 如DoubleGras所述,由于此更改,orderBy()不允许ASC或DESC之后的任何其他内容。我相应地更新了我的答案。
编辑2: Laravel5.2最终为此实现了包装函数。它称为 inRandomOrder() 。