Соединение нескольких таблиц в построителе запросов laravel приводит к дублированию - PullRequest
0 голосов
/ 15 октября 2019

Я пытаюсь использовать Laravel Query Builder для объединения двух таблиц.

Вот мой запрос на объединение двух таблиц


  $instructors = DB::table('instructors')
                ->join('instructor_courses', 'instructors.id', '=','instructor_courses.instructor_id')
                ->where('instructor_courses.course_id', $schedule->course_id)
                ->where('instructor_courses.position', 'Instructor')
                ->whereNull('instructor_courses.deleted_at')
                ->whereNull('instructors.deleted_at')
                ->get();

Код позволяет мне правильно присоединиться к таблице, однако это приводит к многократному дублированию. Посмотрите на результат, переданный в теге select

enter image description here

Вот схема, которую я имею

Таблица инструкторов enter image description here

Таблица курсов инструкторов enter image description here

По сути, я хочу добиться отображения записибез дублирования. Есть ли лучший подход к объединению нескольких таблиц, как эта? Спасибо

Ответы [ 2 ]

0 голосов
/ 15 октября 2019

Попробуйте использовать функцию ->distinct() в laravel для предотвращения дублирования при выборе данных.

$instructors = DB::table('instructors')
            ->join('instructor_courses', 'instructors.id', '=','instructor_courses.instructor_id')
            ->where('instructor_courses.course_id', $schedule->course_id)
            ->where('instructor_courses.position', 'Instructor')
            ->whereNull('instructor_courses.deleted_at')
            ->whereNull('instructors.deleted_at')
            ->groupBy('instructors.id')
            ->distinct()
            ->get();
0 голосов
/ 15 октября 2019

Вы должны использовать groupBy для instructors.id

 $instructors = DB::table('instructors')
            ->join('instructor_courses', 'instructors.id', '=','instructor_courses.instructor_id')
            ->where('instructor_courses.course_id', $schedule->course_id)
            ->where('instructor_courses.position', 'Instructor')
            ->whereNull('instructor_courses.deleted_at')
            ->whereNull('instructors.deleted_at')
            ->groupBy('instructors.id') //add a line
            ->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...