提问者:小点点

Laravel雄辩:如何使用嵌套关系计数


假设我们有四个表:标签、贴子、回复和贴子标签

tags table:

id  tag
1   tag A
2   tag B
3   tag C    
posts table:

id  post_content
1   some text A
2   some text B
3   some text C
post_tag table: (for many-many relationship between posts and tags)

post_id  tag_id
1        1
1        2
2        3
replies table:

id  post_id
1   1
2   1
3   2    

现在,我希望生成一个表,该表给出每个标记的回复总数。基于上表的样本输出为:

id  tag_id  replies_count
1   1       2
2   2       2
3   3       1

我已经在标签和帖子之间建立了一种关系,但是我有没有办法在标签上生成一种关系,从而为我提供标签的所有回复?差不多

function replies() {
   return $this->posts()->replies()
}

最后但并非最不重要的一点是,我希望更进一步:我希望得到的最后一个表将是一个表,其中每个标记都包含post计数和回复计数

id  tag_id  posts_count  replies_count
1   1       1             2
2   2       1             2 
3   3       1             1

共1个答案

匿名用户

您可以使用$with属性将“回复”关系自动附加到Post模型,而不是在标记模型中创建新的关系方法。无论何时获取与该标签相关的所有帖子,它都将包括与该帖子相关的所有回复。

我不建议仅仅为了计算标签的回复而创建一个表,您可以在客户端利用响应数据来实现这一点。