从外键表Laravel获取第一张图像

时间:2019-06-21 11:21:38

标签: php mysql laravel

参考:Fetch first image from foreign key table,但是这次在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是帖子表ID的外键。

1 个答案:

答案 0 :(得分:2)

您需要确认的事情很少。

  1. 您已经为表创建了模型,例如ViewModel表的Postposts表的PostImages。如果不是,请遵循文档。 https://laravel.com/docs/5.8/eloquent

  2. 您已使用post_imageshasMany模型中创建了post关系。像:

post_images模型中。

Post
  1. 然后更改控制器以使用早期加载,例如:
/**
* Get the images for the post.
*/
public function images()
{
    return $this->hasMany('App\PostImage');
}

现在视图如下:


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

解决方案:2

您可以使用<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> 创建另一个关系,以获取单个图像,例如:

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")