Home > Blockchain >  How to Add Multi-filter on Search Laravel Livewire
How to Add Multi-filter on Search Laravel Livewire

Time:11-26

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 . '%')
        
  • Related