laravel - 如何在 laravel 中进行多重过滤查询?
问题描述
我有 3 个查询过滤器将用于搜索。第一个查询是选择选项查询,当我想在日期开始和日期结束查询之间进行搜索时,第二个查询是日期查询。最后一个查询是关于搜索名称等。唯一有效的查询只是最后一个。我的代码会发生什么,我认为我的代码没有任何问题
这是我使用过滤器的代码
过滤控制器.php
public function viewType(Request $request, ReportViewAll $reportview){
$reportview = $reportview->newQuery();
if ($request->has('program')) {
if($request->input('program') == 'reportall'){
$reportview;
}
elseif($request->input('program') == 'reportactive'){
$reportview->where('crewprogram_isdisabled', '=',0);
}
elseif($request->input('program') == 'reporthistory'){
$reportview->where('crewprogram_isdisabled', '=',1);
}
}
if(($request->has('datestart') && $request->has('dateend'))){
$reportview->whereBetween('crewprogrammemo_placement_date',
array($request->input('datestart'), $request->input('dateend')));
}
if($request->has('search')){
$reportview->where ( 'employee_nik', 'LIKE', "%{$request->search}%" )
->orWhere ( 'employee_nama', 'LIKE', "%{$request->search}%" )
->orWhere ( 'show_focus_id', 'LIKE', "%{$request->search}%" )
->orWhere ( 'show_name', 'LIKE', "%{$request->search}%" );
}
return $reportview->get();
// return view('CrewProgram.ReportView.index', compact('reportview'));
}
我应该怎么做才能让他们三个开始工作,而不仅仅是 1 个正在工作的查询
已编辑
public function viewType(Request $request, ReportViewAll $reportviewall){
$reportviewall = $reportviewall->newQuery();
if ($request->has('program')) {
if($request->input('program') == 'reportall'){
$reportviewall;
}
elseif($request->input('program') == 'reportactive'){
$reportviewall->where('crewprogram_isdisabled', '=',0);
}
elseif($request->input('program') == 'reporthistory'){
$reportviewall->where('crewprogram_isdisabled', '=',1);
}
}
if(($request->has('datestart') && $request->has('dateend'))){
$reportviewall->whereBetween('crewprogrammemo_placement_date',
array($request->input('datestart'), $request->input('dateend')));
}
If($request->has('search')){
$reportviewall->where(function($query) use($request) {
$query->where('employee_nik', 'LIKE', "%{$request->search}%" )
->orWhere ( 'employee_nama', 'LIKE', "%{$request->search}%" )
->orWhere ( 'show_focus_id', 'LIKE', "%{$request->search}%" )
->orWhere ( 'show_name', 'LIKE', "%{$request->search}%" );
});
}
$reportviewall = $reportviewall->get();
return view('CrewProgram.ReportView.index', compact('reportviewall'));
}
解决方案
您的查询的问题是,当您传递搜索过滤器时,您将多个orWhere()
' 链接到查询,这意味着将返回对这些过滤器之一的任何查询,如果任何其他过滤器为假,解决方案是将搜索过滤器包装在回调函数中,如下所示:
if($request->has('search')){
$reportview->where(function($query) use($request) {
$query->where('employee_nik', 'LIKE', "%{$request->search}%" )
->orWhere ( 'employee_nama', 'LIKE', "%{$request->search}%" )
->orWhere ( 'show_focus_id', 'LIKE', "%{$request->search}%" )
->orWhere ( 'show_name', 'LIKE', "%{$request->search}%" );
});
}
推荐阅读
- stm32 - 如何在 RTOS 的 Cortex-M3 微控制器中以高频(> 100kHz)运行周期性线程?
- python - list(temp) 或 [temp] 有什么区别
- php - 是否可以通过用户点击在单个页面上加载多个谷歌图表
- javascript - Promise.all 的 url 数组?
- php - 如何在 PHP 中转换日期格式
- c# - 如何在没有代码隐藏的情况下实现 OnPreviewMouseDown?
- php - mPDF PHP - 每页的特定脚注
- android - 如何生成pdf文件并给出命令在android中打印生成的文件
- ios - [iOS][ReactNative] 使用 react-viro 为通用 iOS 设备构建时架构 armv7 的未定义符号
- python - python plotly将值绘制为数千