Laravel:使用Fluent在JOIN中使用复杂条件

时间:2013-04-18 11:53:16

标签: laravel laravel-3

出于复杂架构和原因的原因。需要使用Fluent或Eloquent的库(不仅仅是原始DB :: query()),我需要创建:

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

作为join子句;我已经尝试过回调&我能想到的其他一切,但无法获得正确的语法来生成。

我试过了:

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

    })

但它会在我的1& null(我知道空位不对 - 试验)我无法摆脱;否则它看起来非常接近

任何帮助?

TIA


谢谢,菲尔 - 最终答案是:

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

1 个答案:

答案 0 :(得分:13)

您似乎需要使用DB::raw(),否则->on()需要使用两列。有点像...

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