我有一个小桌子,并尝试使用一些过滤器从中获取一些特定数据。
我的尝试:
$matchingCars = Car::where([
['brand', '=', request('brand')],
['model', '=', request('model')],
['price', '<', request('maxPrice')],
])->get();
结果:
Collection {#249 ▼
#items: []
}
您可以看到没有返回任何内容。但是,如果我逐个查询并计算结果,那么我会得到一个高于0的数字,所以有些模型会通过我的过滤器!
$checkBrands = Car::where('brand', '=', request('brand'))->get();
$checkModels = Car::where('model', '=', request('model'))->get();
$checkPrice = Car::where('price', '<', request('maxPrice'))->get();
echo count($checkBrands) . "<br>"; //output: 1
echo count($checkModels). "<br>"; //output: 1
echo count($checkPrice). "<br>"; //output: 8
die;
为什么它们没有存储在集合中?
答案 0 :(得分:4)
您需要orWhere()
: -
$matchingCars = Car::where('brand', '=', request('brand'))
->orwhere('model', '=', request('model'))
->orwhere('price', '<', request('maxPrice'))->get()
注意: -
你说: - However, if I do the queries one by one and count the result, then I get a number higher than 0
但这并不意味着所有这三个查询与AND
的组合将返回结果。
所以应用上面的OR
条件。
答案 1 :(得分:1)
试试这个:
$matchingCars = Car::where('brand', '=', request('brand'))
->where('model', '=', request('model'))
->where('price', '<', request('maxPrice'))->get();
答案 2 :(得分:1)
$matchingCars = Car::where('brand', '=', request('brand'))
->where('model', '=', request('model'))
->where('price', '<', request('maxPrice'))->get();
并确保request()