У меня есть 3 модели, связанные с этим вопросом;Страна, производитель и регион.
Я упростил таблицы ради этого вопроса.Я не думаю, что что-то еще в таблицах или в других моделях связано с этой проблемой.
Мои таблицы настроены так:
manufacturers
- id
- name
countries
- id
- name
regions
- id
- name
- manufacturer_id
- country_id
Что я хочубыть способным сделать это значит написать $manufacturer->countries
в моем блейде и заставить его выплюнуть страны, связанные с данным производителем.
Модели в настоящее время связаны друг с другом следующим образом:
Country.php
public function manufacturers()
{
return $this->hasMany(Manufacturer::class);
}
public function regions()
{
return $this->hasMany(Region::class);
}
Region.php
public function manufacturer()
{
return $this->belongsTo(Manufacturer::class);
}
public function country()
{
return $this->belongsTo(Country::class);
}
и где у меня возникла проблема, Manufacturer.php
Я думаю, что мне нужна hasManyотношения.Я уже получил;
public function regions()
{
return $this->hasMany(Region::class);
}
, и я бы подумал, что мне понадобится;
public function countries()
{
return $this->hasManyThrough(Country::class,Region::class);
}
, но это приводит к этой ошибке;
Column not found: 1054 Unknown column 'countries.region_id' in 'on clause' (SQL: select `countries`.*, `regions`.`manufacturer_id` as `laravel_through_key` from `countries` inner join `regions` on `regions`.`id` = `countries`.`region_id` where `regions`.`manufacturer_id` = 4)
поэтому я попытался поменять местами классы, чтобы дать;
public function countries()
{
return $this->hasManyThrough(Region::class,Country::class);
}
, но это приводит к;
Column not found: 1054 Unknown column 'countries.manufacturer_id' in 'field list' (SQL: select `regions`.*, `countries`.`manufacturer_id` as `laravel_through_key` from `regions` inner join `countries` on `countries`.`id` = `regions`.`country_id` where `countries`.`manufacturer_id` = 4)
Кто-нибудь знает, как я должен установить свои отношения, чтобы добиться того, что яхочу?
Я также попробовал belongsToMany
отношения, которые вернули страны, но несколько раз в одной стране.Я просто хочу один экземпляр каждой страны, который появляется в таблице регионов для любого данного производителя.