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
更接近 Y
或 D1
,您不想以 undefined variable $rs
结束
我有 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
更接近 Y
或 D1
undefined variable $rs
结束