Преобразуйте этот оператор SQL в Laravel ORM - PullRequest
0 голосов
/ 31 марта 2019

Как я могу сделать это в Laravel ORM?

SELECT
    s.id,
    s.name AS NAME,
    COALESCE(su.cnt, 0) AS SUBJECTs,
    COALESCE(e.marks, 0) AS MARKS
FROM student s
LEFT JOIN
(
    SELECT student_id, COUNT(*) AS cnt
    FROM subject
    GROUP BY student_id
) su
    ON s.id = su.student_id
LEFT JOIN
(
    SELECT student_id, SUM(mark) AS marks
    FROM exam
    GROUP BY student_id
) e
    ON s.id = e.student_id;

Я хочу объединиться между СТУДЕНТОМ и ПРЕДМЕТОМ, СТУДЕНТОМ и ЭКЗАМЕНОМ.Проблема возникает, когда я присоединяюсь к третьей таблице, она дублирует результаты.

1 Ответ

0 голосов
/ 31 марта 2019

Это

DB::table('student as su')->selectRaw("
  su.id,
  su.name,
  COALESCE(su.cnt, 0) as SUBJECTS,
  COALESCE(e.marks, 0) as MARKS
")->leftJoin(DB::raw("(
  SELECT student_id, COUNT(*) AS cnt
  FROM subject
  GROUP BY student_id
) su"), 's.id', '=', 'su.student_id')
->leftJoin(DB::raw("(
  SELECT student_id, SUM(mark) AS marks
  FROM exam
  GROUP BY student_id
) e"), 's.id', '=', 'e.student_id')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...