如何在搜索中添加多重过滤器 Laravel Livewire
How to Add Multi-filter on Search Laravel Livewire
所以我制作了一个简单的搜索栏,它运行良好,但是我在添加 2 个过滤器(学年 'sy')和(学期 'sem')时迷路了下拉。
如果用户选择特定学年或学期,搜索将仅显示包含特定学年和学期的数据。
$allschedule = DB::table('load_schedule')
->leftjoin('emp_info', 'load_schedule.faculty_id', '=','emp_info.user_id')
->orderBy('lastname', 'ASC')
->orWhere('section', 'like', $src)
->orWhere('room', 'like', $src)
->orWhere('lastname', 'like', $src)
->orWhere('firstname', 'like', $src)
->select('load_schedule.*', 'emp_info.firstname', 'emp_info.lastname')
->paginate(10);
您可以尝试使用您的查询功能
$allschedule = DB::table('load_schedule')
->leftjoin('emp_info', 'load_schedule.faculty_id', '=','emp_info.user_id')
->where(function ($query) use ($src, $selection) {
if ($src) {
$query->orWhere('section', 'like', $src)
->orWhere('room', 'like', $src)
->orWhere('lastname', 'like', $src)
->orWhere('firstname', 'like', $src);
}
if ($selection === 'sy') {
$query->where('schoolyear ', 'sy')
}
if ($selection === 'sem') {
$query->where('schoolyear ', 'sem')
}
})
->orderBy('lastname', 'ASC')
->select('load_schedule.*', 'emp_info.firstname', 'emp_info.lastname')
->paginate(10);
或者您可以尝试:
$allschedule = DB::table('load_schedule')
->leftjoin('emp_info', 'load_schedule.faculty_id', '=','emp_info.user_id') ->orderBy('lastname', 'ASC')
->orWhere('section', 'like', $src)
->orWhere('room', 'like', $src)
->orWhere('lastname', 'like', $src)
->orWhere('firstname', 'like', $src)
->select('load_schedule.*', 'emp_info.firstname', 'emp_info.lastname');
if ($selection === 'sy') {
$allschedule ->where('schoolyear ', 'sy')
}
if ($selection === 'sem') {
$allschedule ->where('schoolyear ', 'sem')
}
return $allschedule->paginate(10);
此外,如果您进行搜索,请不要忘记将通配符添加到您的 :D
where('firstName', 'like', '%' . $scr . '%')
您应该将所有 orWhere
语句放在 where
中
$allschedule = DB::table('load_schedule')
->leftjoin('emp_info', 'load_schedule.faculty_id', '=', 'emp_info.user_id')
->orderBy('lastname', 'ASC')
->where(function($query) use ($src){
return $query->orWhere('section', 'like', $src)
->orWhere('room', 'like', $src)
->orWhere('lastname', 'like', $src)
->orWhere('firstname', 'like', $src);
})
->select('load_schedule.*', 'emp_info.firstname', 'emp_info.lastname')
->paginate(10);
所以我制作了一个简单的搜索栏,它运行良好,但是我在添加 2 个过滤器(学年 'sy')和(学期 'sem')时迷路了下拉。 如果用户选择特定学年或学期,搜索将仅显示包含特定学年和学期的数据。
$allschedule = DB::table('load_schedule')
->leftjoin('emp_info', 'load_schedule.faculty_id', '=','emp_info.user_id')
->orderBy('lastname', 'ASC')
->orWhere('section', 'like', $src)
->orWhere('room', 'like', $src)
->orWhere('lastname', 'like', $src)
->orWhere('firstname', 'like', $src)
->select('load_schedule.*', 'emp_info.firstname', 'emp_info.lastname')
->paginate(10);
您可以尝试使用您的查询功能
$allschedule = DB::table('load_schedule')
->leftjoin('emp_info', 'load_schedule.faculty_id', '=','emp_info.user_id')
->where(function ($query) use ($src, $selection) {
if ($src) {
$query->orWhere('section', 'like', $src)
->orWhere('room', 'like', $src)
->orWhere('lastname', 'like', $src)
->orWhere('firstname', 'like', $src);
}
if ($selection === 'sy') {
$query->where('schoolyear ', 'sy')
}
if ($selection === 'sem') {
$query->where('schoolyear ', 'sem')
}
})
->orderBy('lastname', 'ASC')
->select('load_schedule.*', 'emp_info.firstname', 'emp_info.lastname')
->paginate(10);
或者您可以尝试:
$allschedule = DB::table('load_schedule')
->leftjoin('emp_info', 'load_schedule.faculty_id', '=','emp_info.user_id') ->orderBy('lastname', 'ASC')
->orWhere('section', 'like', $src)
->orWhere('room', 'like', $src)
->orWhere('lastname', 'like', $src)
->orWhere('firstname', 'like', $src)
->select('load_schedule.*', 'emp_info.firstname', 'emp_info.lastname');
if ($selection === 'sy') {
$allschedule ->where('schoolyear ', 'sy')
}
if ($selection === 'sem') {
$allschedule ->where('schoolyear ', 'sem')
}
return $allschedule->paginate(10);
此外,如果您进行搜索,请不要忘记将通配符添加到您的 :D
where('firstName', 'like', '%' . $scr . '%')
您应该将所有 orWhere
语句放在 where
$allschedule = DB::table('load_schedule')
->leftjoin('emp_info', 'load_schedule.faculty_id', '=', 'emp_info.user_id')
->orderBy('lastname', 'ASC')
->where(function($query) use ($src){
return $query->orWhere('section', 'like', $src)
->orWhere('room', 'like', $src)
->orWhere('lastname', 'like', $src)
->orWhere('firstname', 'like', $src);
})
->select('load_schedule.*', 'emp_info.firstname', 'emp_info.lastname')
->paginate(10);