Laravel - 用Eloquent或Fluent生成随机行。

32 浏览
0 Comments

Laravel - 用Eloquent或Fluent生成随机行。

在Laravel框架中,我该如何使用Eloquent或Fluent选取一行随机数据?

我知道可以通过使用SQL的RAND()函数来实现,但我想要在不需要在初始查询之前计算记录数的情况下得到随机行。

有什么好的想法吗?

admin 更改状态以发布 2023年5月22日
0
0 Comments

这个很好用,

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

你也可以通过改变random函数中的参数来获取多条记录。

注意:如果你的数据很大,不建议使用这个方法,因为它会先获取所有的行,然后返回随机值。

0
0 Comments

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()

0