Laravel 4 是否有更有效的方法获取视图中模型的计数?拉维尔

Laravel 4 是否有更有效的方法获取视图中模型的计数?拉维尔,laravel-4,eloquent,blade,Laravel 4,Eloquent,Blade,我有图像。每个图像都有评论,每个评论都有自己的喜好。在我看来,我想通过这样做来显示评论的赞数: @foreach ($images as image) <img href="$image->url"> <div class="comment-box"> @foreach ($image->comments as $comment) <div class="comment">

我有图像。每个图像都有评论,每个评论都有自己的喜好。在我看来,我想通过这样做来显示评论的赞数:

@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
但在我的情况下,我不知道如何实施这一点。我可以把这种东西放在我的模型中,这样我就可以随时调用像
{{$comment->likes()->like_count}}
?我如何才能使
$comment->likes->count()
工作而不出现N+1问题

下面是更多的代码:

媒体模型

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'));
}

假设
$comment->likes
获得了评论的喜欢列表,为什么不像这样使用blade的count(
count($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
@foreach($imagesas image)
@foreach($image->comments as$comment)
{{$comment->owner()->name}{{{$comment->body}}
{{count($comment->likes)}
@endforeach
@endforeach

感谢@lukasgeiter在评论中指出了一个错误

啊,我不知道你能做
count($comment->likes())
vs
$comment->likes()->count()
我对拉雷维尔很陌生,谢谢!实际上,
count($comment->likes())
将运行一个新的查询
likes()
返回关系,而不是关系结果。应该是
count($comment->likes)
$comment->likes->count()
(没有区别)是的,这也是我的问题,然后是我项目的其他地方。雄辩是很难的。谢谢你@lukasgeiter
@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