Laravel Eloquent 查询 - 计数限制()
Laravel Eloquent Query - limit on a count()
我需要知道 table 是否有超过 50 行符合某些条件。因此,原始查询应如下所示:
SELECT COUNT(id) FROM (SELECT id FROM table WHERE {conditions} LIMIT 50)
但我无法通过 eloquent 执行此操作。这是我到目前为止尝试过的....
card::where( ... )->limit(50)->count("id");
...但这不起作用。它不会对限制进行子查询,因此限制变得无用。
如果没有 运行 受限的子查询,查询时间将延长 10 倍.....恐怕它不会像我需要的那样可扩展。
如果您只想计算列数,请使用不带参数的 count()
:
$numberOfRows = Card::where(....)->take(50)->count();
我最终确实想出了一个解决方案,我只是没有 post 它(直到现在)。你可以直接抓取第50条记录的ID看是否存在:
$atLeastFifty = Card::offset(50)->value("id");
if(!empty($atLeastFifty)){
// there are at least 50 records
}else{
// there are less than 50 records
}
当 table.
中有大量记录时,这 比 count()
快
我需要知道 table 是否有超过 50 行符合某些条件。因此,原始查询应如下所示:
SELECT COUNT(id) FROM (SELECT id FROM table WHERE {conditions} LIMIT 50)
但我无法通过 eloquent 执行此操作。这是我到目前为止尝试过的....
card::where( ... )->limit(50)->count("id");
...但这不起作用。它不会对限制进行子查询,因此限制变得无用。
如果没有 运行 受限的子查询,查询时间将延长 10 倍.....恐怕它不会像我需要的那样可扩展。
如果您只想计算列数,请使用不带参数的 count()
:
$numberOfRows = Card::where(....)->take(50)->count();
我最终确实想出了一个解决方案,我只是没有 post 它(直到现在)。你可以直接抓取第50条记录的ID看是否存在:
$atLeastFifty = Card::offset(50)->value("id");
if(!empty($atLeastFifty)){
// there are at least 50 records
}else{
// there are less than 50 records
}
当 table.
中有大量记录时,这 比count()
快