Laravel雄辩的随机查询

时间:2016-03-11 13:36:20

标签: laravel eloquent

我有这种雄辩的查询,我需要从表中获取随机行,有一个限制,但它返回错误,当我使用limit时,它只拉一行,无论我接受什么数字限制。当我不使用限制时,它会返回随机行数。不知道我错过了什么。这是代码。

$questions = $query->whereRaw('RAND()')->take($limit)->get();

提前致谢!

2 个答案:

答案 0 :(得分:4)

您应该使用orderByRaw

但是有一个更好的解决方案,你可以添加这个宏:

use Illuminate\Database\Query\Builder;

Builder::macro('orderByRandom', function () {

    $randomFunctions = [
        'mysql'  => 'RAND()',
        'pgsql'  => 'RANDOM()',
        'sqlite' => 'RANDOM()',
        'sqlsrv' => 'NEWID()',
    ];

    $driver = $this->getConnection()->getDriverName();

    return $this->orderByRaw($randomFunctions[$driver]);
});

所以你可以这样做:$query->orderByRandom()->take($limit)->get();

答案 1 :(得分:0)

你在你的地方使用RAND,它在ORDER BY中大喊

$questions = $query->orderByRaw('RAND()')->take($limit)->get();