参考: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的外键。
答案 0 :(得分:2)
您需要确认的事情很少。
您已经为表创建了模型,例如ViewModel
表的Post
和posts
表的PostImages
。如果不是,请遵循文档。 https://laravel.com/docs/5.8/eloquent
您已使用post_images
在hasMany
模型中创建了post
关系。像:
post_images
模型中。Post
/**
* 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")