我真正想要的是,对于特定用户,我试图在单个博客下显示每个图像。我得到的是每个博客的单个博客帖子图像。
控制器
$user_id = Session::get('id');
$user = Users::find($user_id);
$blogs = Blog::where('user_id', $user_id)->paginate(10);
$blogImage = BlogImage::where('blog_id', $blogs->pluck('id'))->get();
return view('Users.userlayout', compact('user', 'blogCat', 'blogs', 'username', 'blogImage'));
查看页面
@foreach($blogs as $blog)
<div class="post">
@foreach($blogImage as $img)
<img src="{{asset('storage/blog_img/'.$img->blog_img)}}" alt="Image"
class="img-responsive">
@endforeach
<p>
<?php $str = $blog->blog_desc; ?>
{{str_limit($str, 250, "...")}}
</p>
<a href="{{URL::to('/blog-details/'.$blog->id)}}" target="_blank" class="btn_1">
Read more
</a>
</div>
<hr>
@endforeach
答案 0 :(得分:1)
这是因为您使用的是where
而不是whereIn
。
如果您尝试将数组或集合传递给where
,它将仅使用第一个值。
$blogImage = BlogImage::whereIn('blog_id', $blogs->pluck('id'))->get();
由于这将返回与分页列表中的BlogImage
关联的所有Blog
,因此我想您需要进行检查以确保您仅显示与特定Blog
关联的图像。一种方法是使用`@continue():
@foreach($blogImage as $img)
@continue($blogImage->blog_id !== $blog->id)
<img src="{{asset('storage/blog_img/'.$img->blog_img)}}" alt="Image" class="img-responsive">
@endforeach
所有这些,我建议您在Blog
和BlogImage
之间使用one-to-many relationship:
博客
public function images()
{
return $this->hasMany(BlogImage::class);
}
BlogImage
public function blog()
{
return $this->belongTo(Blog::class);
}
然后,在您的控制器中,您可以Eager load图片,并具有以下内容:
$blogs = Blog::with('images')->where('user_id', $user_id)->paginate(10);
您的刀片文件将具有:
@foreach($blog->images as $image)
<img src="{{asset('storage/blog_img/'.$image->blog_img)}}" alt="Image" class="img-responsive">
@endforeach
然后,您也可以在User
和Blog
之间应用相同的one-to-many relationship逻辑。