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))
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
yjrowe
最佳答案

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

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

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

1年前 评论

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