У меня есть следующие таблицы для связи многих со многими (ссылка на диаграмму ниже)
имя таблицы applications
, applicants
, applicant_application
applications table
id | stage |
------+----------------------------------------------------
1 | 1 |
2 | 2 |
.
.
.
___________________________________________________________
applicants table
id | user_id |
------+--------------------------------------------------
1 | 27 |
2 | 12 |
.
.
.
___________________________________________________________
applicant_application table (pivot table for eloquent)
applicant_id | application_id |
-------------+-------------------------------------------
1 | 1 |
2 | 2 |
.
.
.
applications
и applicants
являются независимыми таблицами, которые связаны с applicant_application
То, что я пытаюсь сделать, это перечислить всю таблицу stages
из applications
и соответствующий ей счет, но с дополнительным условием, где информация находится в applicants
таблице
Вот мой код построителя запросов, я использую построитель запросов, так как я не совсем уверен, как этого добиться с помощью eloquent. вы также заметите, что я тяну только эту стадию 1,13, и есть всего 13 различных стадий
$id = 27;
$stages = DB::query()
->select('apt.stage', DB::raw('count(apt.id) as count'))
->from('applications as apt')
->where('apt.stage', 1)->orWhere('apt.stage', 13)
->leftJoin('applicant_application as aa', 'aa.application_id', '=', 'apt.id')
->join('applicants as app', function($join) use ($id) {
$join->on('aa.applicant_id', 'app.id')
->where('app.user_id', $id);
})
->groupBy('apt.stage')
->orderBy('count', 'DESC')
->get();
return $stages;
Приведенный выше код прекрасно работает со следующим выводом
|stage | Count |
-------+-------+
| 13 | 187 |
| 1 | 180 |
-------+--------
Тем не менее, моя главная проблема здесь - скорость, загрузка, кажется, занимает довольно много времени, я выполнил тот же запрос непосредственно по команде SQL, и для загрузки * требуется 1,929 секунды. 1028 * Не считайте, что в моей базе данных содержится более 500 000 заявителей и более 500 000 записей о заявках, у Applicant_application около 700 000 +
. Теперь мой вопрос: как лучше добиться этого для лучшей скорости? и как я могу добиться этого с помощью Eloquent?
признателен за любую помощь:)