Php 基于小参数Laravel的搜索准则

Php 基于小参数Laravel的搜索准则,php,mysql,laravel,search,eloquent,Php,Mysql,Laravel,Search,Eloquent,仅当我正确填写所有字段时,此搜索才对我有效。我的愿望是,当我只填写一个字段时,我将排除仅与此字段相关的结果。 例如,如果我只在“mark”字段中填入“Audi”,则会得到我的mark名称。我的函数当前仅在所有字段都已填充时返回结果。如果我填充一个字段,它将返回一个空数组。另外,我不确定这个函数是否编写得很好,我遵循了教程。外观代码: public function searchFilterCar(Request $request, Car $car){ if($request->h

仅当我正确填写所有字段时,此搜索才对我有效。我的愿望是,当我只填写一个字段时,我将排除仅与此字段相关的结果。 例如,如果我只在“mark”字段中填入“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();
                    }
                }
            }
        }
    }
}

将条件分成几个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();

它可能看起来有点粗糙,但它减少了代码块的大小,并且可以工作

另一种类似于Khaldoun Nd的答案的方法是使用查询条件。它允许您删除后续的if语句

代码会变成这样:

返回$car
->当($request->car\u type,函数($query,$type){
返回$query->where('car\u type',$type);
})
->当($request->mark,函数($query,$mark){
返回$query->where('mark',$mark);
})
//将其他条件链接到前面的条件中。。。
->get();

供参考:

将每个
->(其中
)分开,并将其置于相关的if条件下。最后,调用类似于
$car->get()
.Okey now criteria not work属性的内容。我从汽车上得到了所有的结果。公共函数searchFilterCar(Request$Request,Car$Car){if($Request->has('Car_-type')){$Car->where('Car_-type'),$Request->input('Car_-type');}if($Request->has('mark')){$Car where('mark,$Request->input('mark');}if($Request->has('model')){$Car where->('model',$request->input('model');….return$car->get()}hmm您能检查它是否正在输入if语句吗?还可以尝试类似于
$car=$car->where('car\u type',$request->input('car\u type');
$car=$car->where('car\u type',$request->input('car type'))这是完美的工作。谢谢你,伙计。随时都可以。请接受我的回答。我也会编辑它