在 Laravel 雄辩查询中获取 NULL/空列

目前我正在 Laravel 上开发 ajax 搜索过滤器,但我无法获得正确的信息,情况如下:

我有 2 张桌子:

  • 表1:软件请求

  • 表2:拒绝类别

通过选择选项,我将名称命名为 Value

https://img1.sycdn.imooc.com/652bace300017dc302160192.jpg

我在控制器功能的查询顶部添加了该选择选项:


$deniedReason = $request->get('deniedReason');

        if($deniedReason == "All"){

            $deniedReason = "";

        }

所以这意味着每次我选择“全部”时它都会是空的,这样我就可以获得像空一样的所有数据(这就是问题)。


这是我当前的查询:


$request_data = SoftwareRequest::leftJoin('DenyCategory', 'SoftwareRequest.DenyCategoryId', '=', 'DenyCategory.Id')->where('DenyCategory.Name', 'like', '%' . $deniedReason . '%')->paginate(20);

所以问题是,如果我选择另一个选项而不是“全部”,例如“已经可用”,我确实会得到例外的数据,这意味着表 1 中的所有对象与具有该选项的表 2 连接,但问题出现在我选择“全部”,它不会带来应有的所有数据,这是因为并非所有对象都DenyCategoryId在 Table1 中,这意味着其中一些对象为空/空,因此它只会带来我在前一个代码块。


$deniedReason = $request->get('deniedReason');

        if($deniedReason == "All"){

            $deniedReason = "";

        }

当我选择“全部”选项时如何使所有数据为空或不为空,以及当我选择另一个选项时如何获取数据?我敢打赌这与查询不是“喜欢”有关,但这超出了我的知识范围。


HUWWW
浏览 108回答 1
1回答

江户川乱折腾

为什么不将该where条款设为可选?$queryBuilder = SoftwareRequest::leftJoin('DenyCategory', 'SoftwareRequest.DenyCategoryId', '=', 'DenyCategory.Id')// Only apply where-clause when denied reason has been provided.if ($request->get('deniedReason') !== 'All') {    $queryBuilder = $queryBuilder->where('DenyCategory.Name', 'like', '%' . $deniedReason . '%');}$request_data = $queryBuilder->paginate(20);
打开App,查看更多内容
随时随地看视频慕课网APP