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> {{ $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> {{ $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> {{ $comment->body }}
<div class="likes">
{{ count($comment->likes) }}
</div>
</div>
@endforeach
</div>
@endforeach