Laravel n+ 问题预加载计数()
Laravel n+ issue eager loading count()
我正在检查我的 laravel 应用程序并尝试修复我能找到的所有 n+ 个问题。我遇到过一种情况,它不是真正的 n+,但不确定如何称呼它。
我有 2 个模型 Post,评论。一个post有很多评论,一个评论属于一个post
当我遍历所有 post 时,我想显示它们包含的评论数量。我已经能够很好地做到这一点。但问题是 2 个查询。
如何更新以下 Eloquent 查询以添加评论计数列。
Post::where('status', 1)->get();
谢谢
更新
自 Laravel 5.2.32 起,已将一种新方法添加到查询生成器中以帮助解决此问题。当您将 withCount($relation)
方法添加到查询时,它将向结果添加一个 {relation}_count
字段,其中包含所提供关系的计数。
因此,您的查询将是:
$posts = Post::where('status', 1)->withCount('comments')->get();
foreach($posts as $post) {
echo $post->comments_count;
}
您可以在 documentation here 阅读更多内容。
原创
@JarekTkaczyk 有一个很好的博客 post 可以满足您的需求。查看文章 here。
基本上,您将创建一个包含 post 的评论计数的关系,并且您将急切加载该关系(从而避免 n+1)。他还有一些语法糖可以通过属性访问器访问计数。
要么只对关系使用计数,要么如果您认为有必要,您可以将 'num_comments' 添加到 Post 模型并在创建评论时递增它:
$post->comments()->count();
或在评论模型中:
public function create( $commentData ){
$result = $this->fill( $commentData );
$this->post()->increment('num_comments');
return $result;
}
我正在检查我的 laravel 应用程序并尝试修复我能找到的所有 n+ 个问题。我遇到过一种情况,它不是真正的 n+,但不确定如何称呼它。
我有 2 个模型 Post,评论。一个post有很多评论,一个评论属于一个post
当我遍历所有 post 时,我想显示它们包含的评论数量。我已经能够很好地做到这一点。但问题是 2 个查询。
如何更新以下 Eloquent 查询以添加评论计数列。
Post::where('status', 1)->get();
谢谢
更新
自 Laravel 5.2.32 起,已将一种新方法添加到查询生成器中以帮助解决此问题。当您将 withCount($relation)
方法添加到查询时,它将向结果添加一个 {relation}_count
字段,其中包含所提供关系的计数。
因此,您的查询将是:
$posts = Post::where('status', 1)->withCount('comments')->get();
foreach($posts as $post) {
echo $post->comments_count;
}
您可以在 documentation here 阅读更多内容。
原创
@JarekTkaczyk 有一个很好的博客 post 可以满足您的需求。查看文章 here。
基本上,您将创建一个包含 post 的评论计数的关系,并且您将急切加载该关系(从而避免 n+1)。他还有一些语法糖可以通过属性访问器访问计数。
要么只对关系使用计数,要么如果您认为有必要,您可以将 'num_comments' 添加到 Post 模型并在创建评论时递增它:
$post->comments()->count();
或在评论模型中:
public function create( $commentData ){
$result = $this->fill( $commentData );
$this->post()->increment('num_comments');
return $result;
}