如何在搜索中添加多重过滤器 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);