отображать изображение с отношениями laravel - PullRequest
0 голосов
/ 06 мая 2020

Я хочу получить первое изображение для каждого продукта, чтобы отобразить его на домашней странице эскизов.

Мой код неверен, потому что отношения в итерации продукта отображали все изображения одного продукта для одного эскиза , это некрасиво :).

Итак, я хочу отображать первое изображение для каждого продукта, потому что я использую загрузку нескольких изображений.

 Route::get('/home', function () {
    $product = Product::with('image')->get();
    dd($product);
    $image = DB::table('images')->get();
    return view('frontend.home')->with(['products' => $product,'image' => $image]);
})->name('shop.home');

На этом этапе не работает, потому что мне нужно отображать первое изображение для каждого продукта, я пробовал это:

@foreach ($products as $product)
<img class="bd-placeholder-img"src="{{ asset("storage/{$product->image->path}") }}">
@endforeach

Ответы [ 2 ]

0 голосов
/ 06 мая 2020
// Product
public function images()
{
    return $this->hasMany(Image::class);//don't forget to import
}

public function previewImage()
{
    return $this->hasOne(Image::class);//don't forget to import
}

В файле маршрута

Route::get('/home', function () {
    $products = Product::with('previewImage')->get();
    return view('frontend.home', compact('products'));
})->name('shop.home');

В лезвии:

@foreach ($products as $product)
<img class="bd-placeholder-img"src="{{ asset('storage/' . $product->previewImage->path) }}">
@endforeach

Я поместил здесь несколько аспектов, используя некоторые из лучших практик и соглашений в рамках . Изучите его и адаптируйте в своем приложении.

0 голосов
/ 06 мая 2020

В настоящее время вы не можете получить форму с одной записью, нетерпеливо загружая отношение «один ко многим», но вы можете определить другое отношение hasOne, чтобы получить одну запись изображения для продукта:

public function oneImage()
{
    return $this->hasOne('App\Image');
}

Затем вызовите контроллер:

$product = Product::with('oneImage')->get();

И он должен отображать одно изображение для каждого продукта.

Совет: в отношениях «один ко многим» имена должны быть во множественном числе, поэтому в вашем случае вы должны назвать функцию images, а не image.

...