2013-04-18 15 views
6

Ze względów złożonego schematu & biblioteka, która wymaga zarówno Płynna lub Eloquent być wykorzystane (nie tylko surowe DB :: query()), trzeba utworzyć:laravel Use złożone w stan JOIN z 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 

jako klauzula dołączenia; Próbowałem wywołania zwrotne & wszystko inne, co mogę myśleć, ale nie można uzyskać właściwej składni do generowania.

Próbowałem:

->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) 

    }) 

ale stawia odwrócone, pojedyncze apostrofy wokół mojego 1 & zerową (wiem zerowy bit nie jest w porządku - eksperymenty), że nie mogę pozbyć; w przeciwnym razie wygląda całkiem blisko

Każda pomoc?

TIA


Dzięki, Phil - ostateczna odpowiedź brzmi:

->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')); 
}) 

Odpowiedz

12

Wygląda na to trzeba użyć DB::raw() inaczej ->on() spodziewa się dwie kolumny. Coś jak ...

->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

przykro - to była moja literówka (Zrobię) To nie działa – jmadsen

+0

Ach, wierzę, trzeba 'DB :: raw()', zobacz moje zaktualizowaną odpowiedź. –

+0

piękne! Sprawdzę to później i wrócę, żeby ci powiedzieć - dziękuję bardzo. – jmadsen

Powiązane problemy