这在一定程度上取决于过滤器的提交方式,但您可以执行以下两件事之一(可能还有更多......):
public function listCars(Request $request)
{
$cars = Car::when($request->get('make'), function ($query, $make) {
$query->where('make', $make);
})
->when($request->get('model'), function ($query, $model) {
$query->where('model', $model);
})
->...
->get();
// do what you have to do
}
因此,您基本上将查询构建器调用包装在when($value, $callback) 中,如果$value 评估为真,它将仅执行$callback。当您使用$request->get('parameter') 检索未设置的参数时,它将返回 null 并且不会执行回调。但要小心,如果$value 是0 它也不会执行回调。所以请确保您没有将其作为索引。
除此之外,您也可以做同样的事情,但表达方式要少一些...
public function listCars(Request $request)
{
$query = Car::query();
if($request->filled('make')) {
$query->where('make', $request->get('make'));
}
if($request->filled('model')) {
$query->where('model', $request->get('model'));
}
// some more filtering, sorting, ... here
$cars = $query->get();
// do what you have to do
}