laravel如何使用switch在数据表中使用查询进行多重过滤

Posted

技术标签:

【中文标题】laravel如何使用switch在数据表中使用查询进行多重过滤【英文标题】:laravel how to make a multiple filter using query in datatables using 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 和数据表

【问题讨论】:

【参考方案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 结束

【讨论】:

以上是关于laravel如何使用switch在数据表中使用查询进行多重过滤的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Laravel DB 查询中使用派生列

Laravel操作数据库 - 原生SQL语句

laravel 视图流程控制,if switch for loop

1+X web中级 Laravel学习笔记——使用DB facade对数据库进行增删改查

如何使用 ajax 提交带有 3 个提交按钮的表单而不重定向到 Laravel 中的表单操作 url?

Laravel 新增的Switch模板控制语句非常不错