【发布时间】:2021-09-25 10:27:39
【问题描述】:
我是 laravel 新手,有一个小问题。我有多个下拉菜单和 3 个输入文本框,用于缩小单个数据表中的搜索范围。数据表是作业历史。下拉菜单和输入如下:
类(下拉),
类型(下拉),
工作状态(下拉),
部门(下拉),
开始日期(输入从日期开始搜索工作),
结束日期(输入以搜索迄今为止的工作),
Last Called(上次调用日期的输入),
我的代码是
$jobs=Job::where('class','LIKE','%'.$request->class.'%')
->orwhere('job_status','LIKE','%'.$request->status.'%')
->orwhere('type','LIKE','%'.$request->type.'%')
->orwhere('department','LIKE','%'.$request->department.'%')
->orWhereBetween('date_booked',[$request->start_date, $request->end_date])
->orWhereBetween('date_last_called',['1970-01-01',$request->last_called])->get();
这只会给我一个标准的结果(例如:仅按类别排序)。 如果我使用“where”而不是“orWhere”,我可以让它工作,但问题是使用所有下拉列表和输入是可选的。如果需要,他们应该只能说使用 2 或 3 个下拉菜单。我可以使用很多 if 语句,但这似乎效率低下。例如:
if($request->class && $request->start_date && $request->end_date)
{
$jobs = Job::where('class','LIKE','%'.$request->class.'%')
->whereBetween('date_booked',[$request->start_date, $request->end_date])->get();
}
else if($request->class)
{
$jobs = Job::where('class','LIKE','%'.$request->class.'%')->get();
}
else if($request->status)
{
$jobs = Job::where('job_status','LIKE','%'.$request->status.'%')->get();
}
else if($request->type)
{
$jobs = Job::where('type','LIKE','%'.$request->type.'%')->get();
}
else if($request->department)
{
$jobs = Job::where('department','LIKE','%'.$request->department.'%')->get();
}
...但是我不需要为每个排列创建一个 if 语句吗?这似乎效率很低。
【问题讨论】:
标签: eloquent laravel-8 laravel-query-builder