Laravel 5 - 如何从雄辩的前30条记录中随机获取一行?

时间:2016-06-11 13:52:10

标签: laravel laravel-5.2

我试图从表格中的前30个记录中获取一个随机行。我首先按score排序所有记录,并在雄辩模型的范围内记录30条记录:

public function scopePopular($query, $d)
{
    return $query->where('d', $d)->orderBy('score', 'desc')->take(30);
}

然后在class

$cnt = Record::popular($d)->count();
if ($cnt == 0)
    return;

$randIndex = rand(0, $cnt-1);
$record = Record::popular($d)->skip($randIndex)->take(1)->first();
return $record;

但是当我检查php artisan tinker时,我发现Record::popular($d)->count();将返回所有记录编号而不是30.如何更正此问题?感谢。

2 个答案:

答案 0 :(得分:1)

get()之前使用count()在count:

之前运行查询
$cnt = Record::popular($d)->get()->count();

答案 1 :(得分:1)

您正在运行查询2次。这不是必要的。

$cnt = Record::popular($d)->count(); // First query
if ($cnt == 0)
    return;

$randIndex = rand(0, $cnt-1);
$record = Record::popular($d)->skip($randIndex)->take(1)->first(); // Second query
return $record;

相反,你可以这样做:

return Record::popular($d)->get()->random(); // One query only