So I have made a simple search bar which is working fine, but I'm lost on adding 2 filters (schoolyear 'sy') and (semester 'sem') using drop down. If user selects a specific schoolyear or semester the search would only display data containing the specific schoolyear and semester.
$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);
CodePudding user response:
You should wrap all the orWhere
statments together inside 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);
CodePudding user response:
you could try a functional where your query for example
$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);
Alternatively you could try :
$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);
also if your doing a search dont forget to add wild cards to your :D
where('firstName', 'like', '%' . $scr . '%')