Как сделать левое внешнее соединение с 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')