2015-02-12 18 views
14

Chcę informacji z jednej tabeli i jeśli są dopasowane informacje z innej tabeli, która również.Jak wykonać lewą zewnętrzną złączkę z Laravel?

to mój kod

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

Zwraca wszystkie odpowiedzi, które mają mecze z odpowiedzi (answers.questions_id questions.id "). niektóre odpowiedzi nie zostały dopasowane (ponieważ nie ma odpowiedzi), ale wciąż chcę odpowiedzi na te pytania.

Jak mogę uzyskać takie lewe sprzężenie zewnętrzne w laravel?

+1

można spróbować określające dołączyć jako bycie ** lewe sprzężenie zewnętrzne **: '-> join ('odpowiedzi jako odpowiedzi', 'responses.answer_id', '=', 'answer.id', 'left outer')'. Ostatnim (opcjonalnym) parametrem metody 'join' jest' $ type', który, gdy nie zostanie określony, domyślnie przyjmuje wartość 'inner'. – Bogdan

+0

@Bogdan To powinno działać. Napisz to jako odpowiedź;) – lukasgeiter

+0

@Bogdan, rzeczywiście to działa! jeśli umieścisz to jako odpowiedź, mogę oznaczyć to jako poprawne. dziwne, że nie jest to lepiej udokumentowane tutaj http://laravel.com/docs/4.2/queries#sins. –

Odpowiedz

27

Można spróbować określające dołączyć jako bycie lewe sprzężenie zewnętrzne:

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

Czwarty parametr metody przyłączenia jest $type, które, gdy nie jest określony, domyślnie wartość inner. Ale ponieważ lewo dołączyć i lewe sprzężenie zewnętrznethe same thing, można po prostu użyć metody leftJoin zamiast tego, aby uczynić go bardziej czytelnym:

->leftJoin('answers as answers', 'responses.answer_id', '=', 'answers.id') 
Powiązane problemy