Laravel 5 Hasmany通过逆查询

时间:2016-08-26 06:01:51

标签: php mysql laravel laravel-5 eloquent

我有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 * from provinces where dealers。{ {1}} = province_idprovincesid =艾伯塔省))

但在经销商表中确实存在province_id列。我怎样才能使它发挥作用?

1 个答案:

答案 0 :(得分:5)

HasManyThrough关系没有反转。您的省可以通过经销商拥有许多车辆,但您的车辆不属于省。您的车辆属于属于省份的经销商。

因此,您的whereHas需要指定嵌套关系:

$p = 'Alberta';
$d = Vehicle::whereHas('dealer.province', function($q) use ($p) {
    return $q->where('province_name', $p);
})->get();
dd($d);