Laravel 5 Hasmany通过逆查询

Mir*_* Vu 2 php mysql laravel eloquent laravel-5

我有3个型号:车辆,经销商和省

雄辩的关系如下:

车辆属于经销商

经销商有很多车辆

省有很多经销商

经销商属于省

省有很多车辆

我想让所有车辆都在特定的省份,但是我的代码需要从车辆模型开始调用,因为我正在为车辆调用许多过滤器.

我的代码:

    $p = 'Alberta';
    $d = Vehicle::whereHas('province', function($q) use ($p) {
        $q->where('province_name', $p);
        return $q;
    })->get();
    dd($d);
Run Code Online (Sandbox Code Playgroud)

不幸得到错误

未找到列:1054'where子句'中的未知列'dealers.province_id'(SQL:select*from vehicleswhere exists(select*from provinceswhere dealers.province_id= provinces.idand province_name= Alberta))

但是$$_id列确实存在于经销商表中.我怎样才能使它工作?

pat*_*cus 6

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

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

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