有没有更有效的方法来获取视图中模型的数量? Laravel

Is there a more efficient way for grabbing the count of a model within the view? Laravel

我有图片。每张图片都有评论,每条评论都有点赞。在我看来,我想通过执行以下操作来显示评论的点赞数:

@foreach ($images as image)
    <img href="$image->url">
    <div class="comment-box">
        @foreach ($image->comments as $comment)
            <div class="comment">
                <span class="comment-owner">{{ $comment->owner()->name }}</span>&nbsp;{{ $comment->body }}
                <div class="likes">
                      {{ $comment->likes()->count() }} // ** HERE IS MY N+1 PROBLEM **
                </div>
            </div>
        @endforeach
    </div>
@endforeach

但是现在每次有评论时我都会获取一个查询。一个页面上可能有数百条评论,因此我会收到数百条查询,只是为了找到 count() 点赞。

我相信有一种方法可以通过执行类似

的操作来获取控制器中的计数
DB::raw('count(*) as like_count')

但我不知道如何在我的情况下实施。我可以把这种东西放在我的模型中,这样我就可以一直调用 {{ $comment->likes()->like_count }} 之类的东西吗?如何在没有 N+1 问题的情况下使 $comment->likes->count() 工作?

这里还有一些代码:

媒体模型

class Media extends Eloquent {
    public function comments()
    {
        return $this->hasMany('Comment');
    }
}

评论模型

class Comment extends Eloquent {
    public function media()
    {
        return $this->belongsTo('Media');
    }

    public function likes()
    {
        return $this->hasMany('Like');
    }
}

喜欢模特

class Like extends Eloquent {
    public function comment()
    {
        return $this->belongsTo('Comment');
    }
}

我的控制器

public function imageViewer($id)
{
    $images = Media::with(['comments' => function($query) {
                  $query->with('likes');
              }])->where('resource_id', $id)->simplePaginate(1);
    return View::make('image-viewer', compact('images'));
}

你为什么不像这样使用 blade 的计数 count($comment->likes) 假设 $comment->likes 获得评论的点赞列表

@foreach ($images as image)
    <img href="$image->url">
    <div class="comment-box">
        @foreach ($image->comments as $comment)
            <div class="comment">
                <span class="comment-owner">{{ $comment->owner()->name }}</span>&nbsp;{{ $comment->body }}
                <div class="likes">
                      {{ count($comment->likes) }} 
                </div>
            </div>
        @endforeach
    </div>
@endforeach

感谢@lukasgeiter 指出评论中的错误