Laravel 来自同一模型的多个模型的计数关系
我有以下三种模型:用户、帖子和评论。一个用户可以有多篇文章,每篇文章可以有多条评论 我想做的是:Laravel 来自同一模型的多个模型的计数关系,laravel,Laravel,我有以下三种模型:用户、帖子和评论。一个用户可以有多篇文章,每篇文章可以有多条评论 我想做的是: 获取属于特定用户的所有帖子中所有评论的计数 获取属于同一用户的所有帖子本月所有评论的计数 起始点是一个特定的Post by ID(因此不是从用户ID开始) 下面是我现在拥有的,这很有效 我的问题是:是否可以将最后两行doing->sum()添加到查询中 我认为这个查询已经很漂亮了,但它看起来会更好,但更重要的是,如果最后两行也包括在内,它将使缓存变得更容易 $post = Post::findO
- 获取属于特定用户的所有帖子中所有评论的计数
- 获取属于同一用户的所有帖子本月所有评论的计数
- 起始点是一个特定的Post by ID(因此不是从用户ID开始)
$post = Post::findOrFail($id);
$posts = Post::where('user_id', $post->user_id)
->withCount(['comments as comments_total'])
->withCount([
'comments as comments_this_month' => function ($q) {
$q->whereBetween('created_at',
[ Carbon::now()->startOfMonth(), Carbon::now()->endOfMonth() ]
);
},
])->get();
});
$comments_this_month_count = $posts->sum('comments_this_month');
$comments_total_count = $posts->sum('comments_total');
我只需要两行代码就可以提出更好的解决方案 在
用户
模型中定义hasManyThrough
关系:
public function comments()
{
return $this->hasManyThrough(
Comment::class,
Post::class,
'user_id', // Foreign key on posts table...
'post_id' // Foreign key on comments table...
);
}
那么就这样称呼它:
$comments_this_month_count = User::find($post->user_id)->comments()
->whereMonth('created_at', now()->month)->count();
$comments_total_count = User::find($post->user_id)->comments()->count();
我只需要两行代码就可以提出更好的解决方案 在
用户
模型中定义hasManyThrough
关系:
public function comments()
{
return $this->hasManyThrough(
Comment::class,
Post::class,
'user_id', // Foreign key on posts table...
'post_id' // Foreign key on comments table...
);
}
那么就这样称呼它:
$comments_this_month_count = User::find($post->user_id)->comments()
->whereMonth('created_at', now()->month)->count();
$comments_total_count = User::find($post->user_id)->comments()->count();
使用
HasManyThrough
是个好主意。虽然现在我仍然有两行代码用于两次计数,就像现在一样。如果我能将它们放在一个查询中,缓存起来会更容易,尽管我可能无论如何都要增加这些计数。使用HasManyThrough
是个好主意。虽然现在我仍然有两行代码用于两次计数,就像现在一样。如果我能把它们放在一个查询中,缓存起来会更容易,尽管我可能无论如何都要增加这些计数。