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->stat
更整洁 Y
或 D1
,您不想以 undefined variable $rs
结束
【讨论】:
以上是关于laravel如何使用switch在数据表中使用查询进行多重过滤的主要内容,如果未能解决你的问题,请参考以下文章
laravel 视图流程控制,if switch for loop
1+X web中级 Laravel学习笔记——使用DB facade对数据库进行增删改查