Я хочу написать запрос левого соединения с подзапросом в eloquent.У меня есть две таблицы, уроки и lesson_user.
lesson
lesson_id | name | grade
lesson_user
lesson_id|user_id
Если конкретный ученик участвует в уроке, его идентификатор будет указан в таблице lesson_user.
Я хочу получить все уроки для оценки, и если пользователь участвует в уроке, то с его идентификатором.
Результат будет: для user_id 5 и класса 3
grade lesson user_id
3 java 5
3 C++ 5
3 Python NULL //He is not participating
Здесь идентификатор пользователя будет отображаться как параметр, я пробовал это, но не сработало.
public function getAll($grade_id, $user_id)
{
$lessons = Lesson::where('grade_id', $grade_id);
if($user_id != null){
$sub = LessonUser::where('user_id', $user_id);
$lessons = $lessons->leftJoin(DB::raw("($sub->toSql()) as b"), 'b.lesson_id', '=', 'lesson.id');
}
$lessons = $lessons
->select("lesson.id", "lesson.name", "user_id", "grade")
->get();
return $lessons;
}
PS: Каждый урок имеет оценку.
Редактировать:
вместо подзапроса и кода в блоке if, я изначально использовал этот код.Но это дает неверные результаты.Он возвращает уроки, которые не относятся к классам.
$lessons = $lessons->leftJoin('lesson_user as b', 'b.lesson_id', '=', 'lesson.id');
$lessons = $lessons->where("b.user_id", $user_id)->orWhereNull("b.user_id");
Спасибо:)