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))
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
yjrowe
最佳答案

1、isset() 是否为真?
2、whereOr -> orWhere

1年前 评论
讨论数量: 1
yjrowe

1、isset() 是否为真?
2、whereOr -> orWhere

1年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!