如何获取用户博客下的图像

时间:2018-11-21 18:33:54

标签: laravel image blogs laravel-5.6

我真正想要的是,对于特定用户,我试图在单个博客下显示每个图像。我得到的是每个博客的单个博客帖子图像。

控制器

$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

1 个答案:

答案 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

所有这些,我建议您在BlogBlogImage之间使用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

然后,您也可以在UserBlog之间应用相同的one-to-many relationship逻辑。