2013-04-18 5 views
6

Aus Gründen eines komplexen Schema & eine Bibliothek, die entweder fliessend oder Eloquent erfordert verwendet werden (nicht nur roh DB :: query()), ich erstellen müssen:Laravel: Verwendung komplexer Zustand in JOIN mit Fluent

LEFT JOIN `camp_to_cabin` 
ON `camper_to_cabin`.`cabin_id` = `camp_to_cabin`.`cabin_id` 
AND `camp_to_cabin`.`camp_id` =1 OR `camp_to_cabin`.`camp_id` IS NULL 

als Join-Klausel; Ich habe versucht, die Callbacks & alles andere, was ich denken kann, aber nicht die richtige Syntax zu generieren.

ich versucht habe:

->left_join('camp_to_cabin', function ($join){ 
     $join->on('camper_to_cabin.cabin_id', '=', 'camp_to_cabin.cabin_id') 
     $join->on('camp_to_cabin.camp_id', '=', 1) 
     $join->on('camp_to_cabin.camp_id', '=', null) 

    }) 

aber es setzt Backticks um meine 1 & null (ich weiß, das Null-Bit ist nicht richtig - das Experimentieren), die ich nicht loswerden kann; sonst sieht es ziemlich nah aus

Irgendwelche Hilfe?

TIA


Danke, Phil - endgültige Antwort ist:

->left_join('camp_to_cabin', function ($join) use ($id){ 
$join->on('camper_to_cabin.cabin_id', '=', 'camp_to_cabin.cabin_id'); 
$join->on('camper_to_cabin.cabin_id', '=', DB::raw($id)); 
$join->or_on('camper_to_cabin.cabin_id', 'IS', DB::raw('NULL')); 
}) 

Antwort

12

Sieht aus wie Sie DB::raw() sonst ->on() erwartet zwei Spalten verwenden müssen. So etwas wie ...

->left_join('camp_to_cabin', function ($join){ 
    $join->on('camper_to_cabin.cabin_id', '=', 'camp_to_cabin.cabin_id') 
    $join->on('camp_to_cabin.camp_id', '=', DB::raw(1)) 
    $join->or_on('camp_to_cabin.camp_id', '=', DB::raw(null)) 
}) 
+0

leid - das war meine Tippfehler (Ich werde fix), die nicht – jmadsen

+0

Ah funktioniert, ich glaube, Sie brauchen 'DB :: raw()', siehe meine Antwort aktualisiert. –

+0

schön! Ich werde das später überprüfen und zurückkommen, um Sie wissen zu lassen - vielen Dank. – jmadsen