laravel 如何使用 switch 在数据表中使用查询创建多重过滤器

laravel how to make a multiple filter using query in datatables using switch

我有 5 个过滤器,kampus,fakulti,程序,学期和状态 所以每个过滤器总是被过滤状态 这意味着状态过滤器将是开关案例的选择,另一个过滤器将是开关案例示例中的条件:

$student = Student::select("*");

    if($student){
      $today = date("Y-m-d");
      switch($request->stat){
        case 'Y':
          
          if($request->kampus != "-" && $request->fakulti != "-" && $request->program != "-" && $request->part != "-" ){
            $rs = $student->where('kodkampus',$request->kampus)
            ->where('kodfakulti',$request->fakulti)
            ->where('kodprogram',$request->program)
            ->where('part',$request->semester)
            ->where('vaccine_date', '<=', $today)
            ->where('vaccine2_date', '<=', $today);

          } else if ($request->kampus != "-" && $request->fakulti != "-"  && $request->program != "-" ){
            
            $rs = $student
            ->where('kodkampus',$request->kampus)
            ->where('kodprogram',$request->program)
            ->where('kodfakulti',$request->fakulti)

            ->where('vaccine_date', '<=', $today)
            ->where('vaccine2_date', '<=', $today);

          } else if ($request->kampus != "-" && $request->fakulti != "-"){
            $rs = $student->where('kodkampus',$request->kampus)
            ->where('kodfakulti',$request->fakulti)
            ->where('vaccine_date', '<=', $today)
            ->where('vaccine2_date', '<=', $today);
            
          } else if ($request->kampus != "-"){
            $rs = $student->where('kodkampus',$request->kampus)
            ->where('vaccine_date', '<=', $today)
            ->where('vaccine2_date', '<=', $today);
          }

          
          $rs = $rs->get();
          break;
        case 'D1':
          $rs = Student::get();
           break;
      }

      return datatables()
      ->of($rs)->make(true);

    }else{
      abort(404,'no record');
    }

所以我需要过滤器可以单独过滤而不需要满足所有条件,例如,如果我只想过滤 fakulti,我可以不选择 kampus 和 program 和 semester。我真的需要帮助,我需要它是单独的过滤器,但在同一个查询中

请帮助我,我卡住了大约 3 天,我是 laravel 的新手,使用 eloquent 和数据表

你不必用 if else

它是一个查询生成器,您可以在 $student 查询生成器上堆叠 wheres

if(!$student){
    return abort(404,'no record');
}
$today = date("Y-m-d");
if ($request->stat == 'Y'){
  if($request->part != "-" ){
    $student->where('part',$request->semester)
  }
  if ($request->program != "-" ){
    $student->where('kodprogram',$request->program)
  }
  if ($request->fakulti != "-"){
    $student->where('kodfakulti',$request->fakulti);
  }
  if ($request->kampus != "-"){
    $student->where('kodkampus',$request->kampus)
    ->where('vaccine_date', '<=', $today)
    ->where('vaccine2_date', '<=', $today);
  }

  $rs = $student->get();
} else {
  $rs = Student::get();
}

return datatables()
->of($rs)->make(true);

更改了另一个 if else 的开关,因为如果 $request->stat 更接近 YD1

,您不想以 undefined variable $rs 结束