Laravel считает количество дочерних элементов в каждой строке - PullRequest
0 голосов
/ 04 января 2019

Я хочу создать алгоритм, который вычисляет, сколько дочерних элементов имеет каждую строку.У меня есть модель автомобиля, которая может сдать несколько экзаменов.Я хочу узнать, сколько автомобилей сдают один экзамен и сколько автомобилей сдают несколько экзаменов.Код, который я показываю ниже, занимает 21 сек, потому что у меня есть 10k + строк.

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

Ответы [ 2 ]

0 голосов
/ 04 января 2019

Thx. За ваш ответ Мозаммил, я исправил ваш код и выложил его.

$cars = Car::withCount('exam')->get();
$recurrent = array("single" => $cars->where('exam_count', '=', 1)->count(), "multiple" => $cars->where('exam_count', '>', 1)->count());
0 голосов
/ 04 января 2019

Вам было бы лучше, если бы Eloquent's withCount . Например, если у вас есть отношение 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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...