Laravel数据库查询返回空集合

时间:2017-02-25 18:17:06

标签: php mysql laravel laravel-5.2

我有一个小桌子,并尝试使用一些过滤器从中获取一些特定数据。

我的尝试:

$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;

为什么它们没有存储在集合中?

3 个答案:

答案 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()

返回正确的内容