目前我正在 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);
- 1 回答
- 0 关注
- 107 浏览
添加回答
举报
0/150
提交
取消