这在一定程度上取决于过滤器的提交方式,但您可以执行以下两件事之一(可能还有更多......):
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
}
Run Code Online (Sandbox Code Playgroud)
因此,您基本上将查询构建器调用包装在 中when($value, $callback),只有在计算结果为 true$callback时才会执行$value。当您使用 检索未设置的参数时$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
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1550 次 |
| 最近记录: |