出于复杂架构和原因的原因一个需要使用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
作为连接子句;我已经尝试过回调&我能想到的其他一切,但无法获得正确的语法来生成.
我试过了:
->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')); })
解决方法
看起来你需要使用
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)) })