我试图从表格中的前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.如何更正此问题?感谢。
答案 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