Laravel计算每行有多少个子元素

时间:2019-01-04 13:01:57

标签: php laravel eloquent

我想做一个算法,计算每行有多少个孩子。我有一个可以进行多次检查的汽车模型。我想获得多少辆汽车进行一项考试,多少辆汽车进行多项考试。我下面显示的代码需要21s才能执行,因为我有10k +行。

$cars = Car::get();
$cars->map(function ($item, $key) use (&$recurrent) {
  if($item->exam->count()==1)
  {
     $recurrent['single']++;
  }
  else
  {
     $recurrent['multiple']++;
  }
});

2 个答案:

答案 0 :(得分:0)

使用Eloquent的withCount会更好。例如,假设您在Car模型中有一个关系exams

$cars = App\Car::withCount('exams')->get();

foreach ($cars as $car) {
    echo $car->exams_count;
}

如果您想让汽车通过一定程度的考试或更多,则可以这样做:

$cars = App\Car::withCount('exams')->get()
    ->having('exams_count', '>', 5)
    ->get();

答案 1 :(得分:0)

Thx。为您的答案Mozammil,我已更正您的代码,并将其发布。

$cars = Car::withCount('exam')->get();
$recurrent = array("single" => $cars->where('exam_count', '=', 1)->count(), "multiple" => $cars->where('exam_count', '>', 1)->count());