web-dev-qa-db-fra.com

Comment faire pour rejoindre Left Outer avec Laravel?

je veux des informations d'une table et s'il y a des informations correspondantes d'une autre table aussi.

c'est mon code

 $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();

Il renvoie toutes les réponses qui correspondent à des réponses (answers.questions_id questions.id '). certaines réponses ne correspondent pas (car il n'y a pas de réponses.answer_id) mais je veux quand même les informations sur les réponses.

comment puis-je obtenir une telle jointure externe gauche dans laravel?

27
Dave Driesmans

Vous pouvez essayer de spécifier la jointure comme étant une jointure externe gauche :

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

Le quatrième paramètre de la méthode de jointure est $type, qui lorsqu'il n'est pas spécifié, prend par défaut la valeur inner. Mais puisque la jointure gauche et la jointure externe gauche sont le même chose , vous pouvez simplement utiliser la méthode leftJoin à la place, pour la rendre plus lisible:

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