为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
HUWWW 2023-10-15 17:10:48
目前我正在 Laravel 上开发 ajax 搜索过滤器,但我无法获得正确的信息,情况如下:我有 2 张桌子:表1:软件请求表2:拒绝类别通过选择选项,我将名称命名为 Value我在控制器功能的查询顶部添加了该选择选项:$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 = "";        }当我选择“全部”选项时如何使所有数据为空或不为空,以及当我选择另一个选项时如何获取数据?我敢打赌这与查询不是“喜欢”有关,但这超出了我的知识范围。
查看完整描述

1 回答

?
江户川乱折腾

TA贡献1851条经验 获得超5个赞

为什么不将该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);

查看完整回答
反对 回复 2023-10-15
  • 1 回答
  • 0 关注
  • 107 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信