【问题标题】:laravel how to make a multiple filter using query in datatables using switchlaravel如何使用switch在数据表中使用查询进行多重过滤
【发布时间】:2021-11-13 15:46:36
【问题描述】:

我有 5 个过滤器,kampus,fakulti,program,semester 和 status 所以每个过滤器总是过滤状态 这意味着状态过滤器将是开关盒的选择,而另一个过滤器将是开关盒示例中的条件:

$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 和学期。我非常需要帮助,我需要它是单独的过滤器,但在同一个查询中

please2 帮我困了大约 3 天,我是 laravel 的新手,使用 eloquent 和数据表

【问题讨论】:

    标签: laravel if-statement eloquent switch-statement laravel-7


    【解决方案1】:

    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-&gt;stat 更整洁 YD1,您不想以 undefined variable $rs 结束

    【讨论】:

      猜你喜欢
      • 2019-12-28
      • 2021-08-16
      • 1970-01-01
      • 2017-11-07
      • 1970-01-01
      • 2016-10-29
      • 2022-01-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多