我有这种雄辩的查询,我需要从表中获取随机行,有一个限制,但它返回错误,当我使用limit时,它只拉一行,无论我接受什么数字限制。当我不使用限制时,它会返回随机行数。不知道我错过了什么。这是代码。
$questions = $query->whereRaw('RAND()')->take($limit)->get();
提前致谢!
答案 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();