2016-08-26 4 views
1

У меня есть 3 модели: Автомобиль, Dealer и провинцияLaravel 5 Hasmanythrough обратного запроса

Красноречивых Отношения следующим образом:

Автомобиль belongsTo дилер

Dealer hasMany Транспорт

Область hasMany Дилеры

Дилер принадлежит к провинции

Область hasManyThrough Транспорт

Я хотел, чтобы все транспортные средства в конкретной области, но мой код должен начать звонить из модели автомобиля, потому что я звоню много фильтров для автомобилей.

Мой код:

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

К сожалению, получение ошибка

Колонка не найден: 1054 Неизвестный столбец 'dealers.province_id' в 'где предложение' (SQL: SELECT * FROM vehicles где существует (выберите * от provinces где dealers. province_id = provinces. id и province_name = Alberta))

Но column_id столба существует в таблице дилеров. Как я могу заставить его работать?

ответ

2

Соотношение HasManyThrough не имеет обратного. Ваша провинция может иметь много транспортных средств через дилеров, но ваш автомобиль не принадлежит провинции. Ваше транспортное средство принадлежит дилеру, принадлежащему провинции.

Из-за этого, ваш whereHas необходимо указать вложенные отношения:

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

Прохладных, он работает как шарм. –

+0

Ещё один вопрос пожалуйста. Вы можете проверить это http://stackoverflow.com/questions/39168103 –