Получение связанной таблицы через промежуточную

Есть 4 таблицы: products, categorys, category_products и images( связанна с products) Каким способом можно получить изображения для каждого товара.

#categoryController

public function category($slug) {
    $category = Category::find(2);
    $brands = Brand::whereIn('id', [1, 3, 4, 10, 11, 12])->get();
    return view('front.catalog.index', compact('image', 'category', 'brands'));
}

#Category Model

public function products() {
    return $this->belongsToMany(Product::class, 'category_products');
}

#template Вывод всего товара этой категории и здесь нужно к каждому товару подставить соответствующее изображение которое хранится в Image

@foreach($category->products as $product)
     @include('layouts/front/card', compact('product'))
@endforeach

Ответы (2 шт):

Автор решения: Morpheu S

Решил проблему добавив в модель Product метод getImage, и теперь эта модель имеет следующий вид

class Product extends Model

{ protected $fillable = ['brand_id', 'article', 'name', 'slug', 'description', 'color', 'season', 'price', 'provider'];

protected $with = ['images'];


public function images() {
    return $this->hasMany(Image::class);
}


public function getImage() {
    foreach ($this->images as $img) {
        return $img->img_one;
    }
}

}

Изображения в шаблоне вывожу вот так

@foreach($category->products as $product)
 <img src="{{ $product->getImage() }}" alt="photo" class="img-reponsive">
@endforeach
→ Ссылка
Автор решения: Serge Koflik

Вы уверены, что ваше решение работает верно? Исходя из кода, getImage() вернёт только 1 изображение.

Если я правильно понял задачу, вам следуюет использовать отношение Has Many Through Подробнее о ней можно прочесть тут: https://laravel.com/docs/8.x/eloquent-relationships#has-many-through

→ Ссылка