Laravel query when 闭包嵌套不生效
when嵌套where语句时,where闭包不生效,我应该如何使用查询构造器呢.
将whereOr修改为orWhere解决问题,感谢 yjrowe
$result = DB::table('test')
->where('company_id', $company_id)
->when(isset($catalogue_id),function ($query) use ($catalogue_id){
return $query
->where(function ($query)use($catalogue_id){
return $query
->whereOr(function ($query)use($catalogue_id){
return $query
->whereIn('data_id',$catalogue_id)
->where('data_type',1);
})->whereOr(function ($query)use ($catalogue_id){
return $query
->whereIn('parent_data_id',$catalogue_id)
->where('data_type',2);
});
});
}, function ($query) use ($retrieval) {
return $query
->where('data_id', $retrieval->data_id)
->where('data_type', 2);
})->get();
实际生成的语句是
select * from `test` where `company_id` = 1
我想实现的是
select * from `test` where `company_id` = 1 and ((`data_id` in (1) and `data_type` = 1) or (`parent_data_id` in (1) and `data_type` = 2))
1、isset() 是否为真?
2、whereOr -> orWhere