Получение связанной таблицы через промежуточную
Есть 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 шт):
Решил проблему добавив в модель 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
Вы уверены, что ваше решение работает верно?
Исходя из кода, getImage() вернёт только 1 изображение.
Если я правильно понял задачу, вам следуюет использовать отношение Has Many Through Подробнее о ней можно прочесть тут: https://laravel.com/docs/8.x/eloquent-relationships#has-many-through