Получить первое изображение из таблицы внешнего ключа Laravel - PullRequest
0 голосов
/ 21 июня 2019

Ссылка: Получить первое изображение из таблицы внешнего ключа , но на этот раз в Laravel.

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

$secondpost = DB::table('posts')
        ->orderBy('id', 'desc')
        ->skip(1)
        ->take(8)
        ->get();

foreach ($secondpost as $spost)
$secondph = DB::table('post_images')
        ->select('filename')
        ->where('post_id', $spost->id)
        ->limit(1)
        ->get()
        ->pluck('filename');

return view ('pages.index', compact('firstp', 'fph', 'secondpost', 'secondph'));
<div class="row">
 @foreach ($secondpost as $secondp)
 <div class="col-lg-3 col-md-3 col-sm-6 col-xs-6 post-ab">
  <div class="row">
   @foreach ($secondph as $sph);
    <img src="{{url($sph)}}" class="imgpost" alt="">
   @endforeach
    <div class="bottomleft">
      <p class="ab-desc">{{$secondp->marca}} {{$secondp->model}}</p>
      <p class="ab-desc">{{$secondp->pret}} Eur</p>
    </div>
    </div>
   </div>
 @endforeach
</div>

Этот код загружает только одно изображение для каждого img src. Post_id - внешний ключ для идентификатора таблицы сообщений.

1 Ответ

2 голосов
/ 21 июня 2019

Есть несколько вещей, которые вам нужно подтвердить.

  1. Вы создали модели для таблицы, например Post для posts таблицы и PostImages для post_images таблицы. Если нет, следуйте документации. https://laravel.com/docs/5.8/eloquent

  2. Вы создали отношение hasMany в своей модели post с post_images. Как:

В Post модель.

/**
* Get the images for the post.
*/
public function images()
{
    return $this->hasMany('App\PostImage');
}
  1. Затем измените в своем контроллере использование ранней загрузки, например:

$secondpost = \App\Post::with("images")
        ->orderBy('id', 'desc')
        ->skip(1)
        ->take(8)
        ->get();

А теперь вид выглядит так:

<div class="row">
 @foreach ($secondpost as $secondp)
 <div class="col-lg-3 col-md-3 col-sm-6 col-xs-6 post-ab">
  <div class="row">
    @php
        $image = $secondp->images->first();
    @endphp
    <img src="{{url($image->filename)}}" class="imgpost" alt="">
    <div class="bottomleft">
      <p class="ab-desc">{{$secondp->marca}} {{$secondp->model}}</p>
      <p class="ab-desc">{{$secondp->pret}} Eur</p>
    </div>
    </div>
   </div>
 @endforeach
</div>

Решение: 2

Вы можете создать другое отношение с помощью hasOne, чтобы получить одно изображение, например:

// In your Post model.

/**
* Get the default image for post.
*/
public function default_image()
{
    return $this->hasOne('App\PostImage')->orderBy("id");
}

Внесите изменения в контроллер для использования ->with("default_image").

И ввиду этого вы можете просто использовать как:

    $secondp->default_image->filename

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...