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
}
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
}
3条答案
按热度按时间efzxgjgh1#
这里是一个类似的查询我在我的应用程序工作的例子。
现在按下$cars变量查看。我希望这对你有用,或者至少给你一个如何继续的想法
hec6srdp2#
这在一定程度上取决于过滤器是如何提交的,但是您可以做以下两件事之一(可能还有更多……):
因此,您基本上是在 Package 查询生成器调用
when($value, $callback)
,只执行$callback
如果$value
计算结果为true。检索未设置的参数时$request->get('parameter')
,它将返回null,并且不执行回调。但要小心,如果$value
是0
它也不会执行回调。所以一定不要把它作为索引。作为另一种选择,你也可以做同样的事情,但用一些不那么雄辩的表达。。。
mcvgt66p3#
下面是一个简单的方法,您还可以在
->when()
条件下,如果您使用的是laravel版本>5.4,请使用$request>filled()
而不是$request->has()
```public function listCars(Request $request)
{
$cars = Car::when($request->has('make'), function ($query)use($request) {
$query->join('maker','car.makerId','=','maker.id')
->where('make', $request->input('make'));
})
->when($request->has('model'), function ($query)use($request) {
$query->where('model', $request->input('model'));
})
->...
->get();
}