我有3个车型:车辆,经销商和省
雄辩的关系如下:
车辆所属经销商
经销商拥有多辆车省有很多经销商
经销商属于省
省有许多通过车辆
我想让特定省份的所有车辆都行驶,但是我的代码需要从车辆模型开始调用,因为我正在为车辆调用许多过滤器。
我的代码:
$p = 'Alberta';
$d = Vehicle::whereHas('province', function($q) use ($p) {
$q->where('province_name', $p);
return $q;
})->get();
dd($d);
不幸的是收到错误
未找到列:1054'where子句'中的未知列'dealers.province_id'(SQL:select * from
vehicles
where where(select * fromprovinces
wheredealers
。{ {1}} =province_id
。provinces
和id
=艾伯塔省))
但在经销商表中确实存在province_id列。我怎样才能使它发挥作用?
答案 0 :(得分:5)
HasManyThrough
关系没有反转。您的省可以通过经销商拥有许多车辆,但您的车辆不属于省。您的车辆属于属于省份的经销商。
因此,您的whereHas
需要指定嵌套关系:
$p = 'Alberta';
$d = Vehicle::whereHas('dealer.province', function($q) use ($p) {
return $q->where('province_name', $p);
})->get();
dd($d);