仅当我正确填写所有字段时,此搜索才对我有用。我希望当我仅填写一个字段时,将排除仅与该字段相关的结果。 例如,如果我仅用“ Audi”填充“ mark”字段,则得到了我的商标名称。我的函数当前仅在填写所有字段时才返回结果。如果我填写一个字段,它将返回一个空数组。另外,我不确定该函数的编写是否正确,因此我遵循了本教程。外观代码:
public function searchFilterCar(Request $request, Car $car){
if($request->has('car_type')){
if($request->has('mark')){
if($request->has('model')){
if($request->has('fuel')){
if($request->has('circuit')){
return $car->where('car_type', $request->input('car_type'))
->where('mark', $request->input('mark'))
->where('model', $request->input('model'))
->where('fuel', $request->input('fuel'))
->where('circuit', $request->input('circuit'))
->get();
}
}
}
}
}
}
答案 0 :(得分:1)
将条件分成多个if语句,where对现有结果起作用,因此您将从上一个where
开始。它应该是这样的:
if($request->has('car_type')){
$car = $car->where('car_type', $request->input('car_type'));
}
if($request->has('mark')){
$car = $car->where('mark', $request->input('mark'));
}
....
return $car->get();
它可能看起来有些粗糙,但是它减小了代码块的大小并且可以正常工作
答案 1 :(得分:0)
与Khaldoun Nd的答案类似的另一种方法是使用查询条件。它允许您删除后续的if语句。
代码将变成这样:
return $car
->when($request->car_type, function ($query, $type) {
return $query->where('car_type', $type);
})
->when($request->mark, function ($query, $mark) {
return $query->where('mark', $mark);
})
// Chain the other conditions like the previous ones...
->get();
以供参考:https://laravel.com/docs/5.8/queries#conditional-clauses