由于某些原因,我在执行以下操作时无法获得预期结果:
$cars = Car::query();
$cars->whereIsVisible(true);
# output: $list
// [2016-01-16 09:30:04] local.INFO: array (
// 0 => 5,
// 1 => 7,
// 2 => 9,
// 3 => 3,
// )
$cars->whereHas('specifications', function($query) use ($list) {
$query->whereIn('id', ($list));
});
$cars->get();
我的期望是,我只获得了具有$ list内所有规格的汽车,但这不正确。即使我填写更多规格,我也会得到更大的结果。所以出了点问题。
我以前是Eloquent,所以我很讨厌。但这是查询:
select * from "cars" where "cars"."deleted_at" is null
and "is_visible" = true
and (select count(*)
from "specs" inner join "car_specs"
on "specs"."id" = "car_specs"."facility_id"
where "car_specs"."car_id" = "cars"."id"
and "id" in (5, 7, 9 ,3)) >= 1
有人知道哪里出错了吗?以及如何解决它?
答案 0 :(得分:0)
根据https://laravel.com/docs/5.1/eloquent-relationships#querying-relations
whereHas
只是检查您是否拥有提供规格的汽车,而不是返回符合您规格的汽车。
我认为你应该直接使用where
。