Отношение, которое вы описываете, лучше всего подходит ко многим, которое обычно записывается в Laravel как принадлежит ToMany с обеих сторон.
class Product extends Model
{
public function countries()
{
return $this->belongsToMany(Country::class);
}
}
class Country extends Model
{
public function products()
{
return $this->belongsToMany(Product::class);
}
}
Если вы придерживаетесь правил именования Laravel:
- Переименовать
product_countries
в country_product
.
- В
country_product
используйте country_id
вместо country_code
.
... вы должны иметь доступ к отношениям так, как вы ожидаете:
$country = \App\Models\Country::find(1);
dd($country->products);
$countries = \App\Models\Country::with('products')->where(...)->get();
foreach ($countries as $country) {
dd($country->products);
}
Если вы не хотите придерживаться соглашений, вы можете настроить способ определения отношений. Подробнее см. Документация Laravel .
В вашем случае, чтобы указать свои отношения, используя свое имя таблицы и имена пользовательских полей, вы можете сделать это:
// In your Product model
return $this->belongsToMany(Country::class, 'product_countries', 'country_code', 'product_id');
// In your Country model
return $this->belongsToMany(Product::class, 'product_countries', 'product_id', 'country_code');