Как я могу получить изображения в блоге для пользователя - PullRequest
0 голосов
/ 21 ноября 2018

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

Контроллер

$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 голосов
/ 21 ноября 2018

Это потому, что вы используете 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

При всем сказанном, я бы порекомендовал использовать one-to-много отношений между Blog и BlogImage:

Блог

public function images()
{
    return $this->hasMany(BlogImage::class);
}

BlogImage

public function blog()
{
    return $this->belongTo(Blog::class);
}

Тогда в вашем контроллере вы можете Быстро загрузить изображений и иметь что-то вроде:

$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.

...