Как сделать левое внешнее соединение с Laravel?

Мне нужна информация из одной таблицы, и если есть соответствующая информация из другой таблицы, которая также.

этот мой код

 $scoreObject = DB::table('responses')
        ->select('responses.id', 'responses.questions_id', 'responses.answer_id', 'responses.open_answer', 'responses.user_id',  'responses.scan_id',
             'questions.question', 'questions.question_nr', 'questions.type', 'questions.totalsection_id',
            'answers.id as answerID', 'answers.answer', 'answers.questions_id', 'answers.points'
        )
        ->Join('answers as answers', 'responses.answer_id', '=', 'answers.id')
        ->Join('questions as questions', 'answers.questions_id', '=', 'questions.id')
        ->orderBy('questions.id', 'ASC')
        ->where('responses.scan_id', $scanid)
        ->where('responses.user_id', $userid)
        ->groupBy('questions.id')
        ->get();

Он возвращает все ответы, имеющие совпадения с ответами (answers.questions_id questions.id). некоторые ответы не совпадают (потому что нет ответов .answer_id), но я все же хочу получить информацию об ответах.

Как я могу получить такое левое внешнее соединение в laravel?

Ответы

Ответ 1

Вы можете попробовать указать соединение как левое внешнее соединение:

->join('answers as answers', 'responses.answer_id', '=', 'answers.id', 'left outer')

Четвертый параметр метода соединения $type, который, если не указан, по умолчанию равен значению inner. Но так как left join и left external join то же самое, вы можете просто использовать метод leftJoin вместо этого, чтобы сделать его более читаемым:

->leftJoin('answers as answers', 'responses.answer_id', '=', 'answers.id')