В вашей структуре БД у вас есть отношение «многие ко многим», которое в Laravel обрабатывается как belongsToMany
https://laravel.com/docs/5.7/eloquent-relationships#many-to-many.
hasManyThrough
для каскада 1-ко-многим -> 1-Во многих случаях.Допустим, у исполнителя много альбомов, и у каждого альбома много песен, а у исполнителя много песен в альбомах.Если вам нужны песни исполнителя, вы можете использовать hasManyThrough
.
. В вашем случае ваше отношение в Product.php
модели должно быть:
public function offers() {
return $this->belongsToMany(Offer::class, 'Offer_product')->withPivot('id');
}
В Offer.php
модели:
public function products() {
return $this->belongsToMany(Product::class, 'Offer_product')->withPivot('id');
}
Теперь, если вы хотите, чтобы все они загружались с нетерпением https://laravel.com/docs/5.7/eloquent-relationships#eager-loading, чтобы избежать N (продуктов) +1 обращений к базе данных:
$products = Product::with('offers')->get();
foreach ($products as $product) {
echo 'product : '.$product->name.'<br/>';
foreach($product->offers as $offer) {
echo '<br>---- offer : '.$offer->name;
// once you called the relation, then you can access data on pivot table
echo ' - pivot id :'.$offer->pivot->id;
}
}