📜  laravel withcount - PHP (1)

📅  最后修改于: 2023-12-03 15:02:35.805000             🧑  作者: Mango

Laravel withCount() - 用于模型关联的聚合方法

在Laravel中,我们可以使用 withCount() 方法,将关联模型的聚合值关联到主查询上。

这个方法非常有用,因为它允许我们在查询关联模型时,获得关联模型的聚合值,而无需执行额外的查询。

用法

在使用 withCount() 方法时,我们需要传递我们想要聚合的关联关系的名称。例如,如果我们想要计算一个 Blog 模型的 comments 关联关系的评论数量,我们可以像这样使用 withCount()

$blogs = Blog::withCount('comments')->get();

这样做将返回一个关联了评论数量值的 Blog 集合,例如:

[
    {
        "id": 1,
        "title": "My First Blog",
        "body": "This is my first blog post.",
        "comments_count": 2
    },
    {
        "id": 2,
        "title": "My Second Blog",
        "body": "This is my second blog post.",
        "comments_count": 0
    }
]

在查询结果中,我们可以看到每个博客对象都有一个新的 comments_count 属性。这个属性包含了对应博客的评论数量。

参数

我们可以向 withCount() 方法传递多个参数来聚合多个关联关系的计数值。例如,如果我们还想要计算 Blog 模型的 likes 关联关系的喜欢数量,我们可以这样写:

$blogs = Blog::withCount(['comments', 'likes'])->get();

这个方法将返回一个关联了评论数量和喜欢数量的 Blog 集合。

筛选

我们也可以在 withCount() 方法之后,链式调用查询构造器的方法。

例如,如果我们想要获取只包含有至少一个评论的博客,可以这样写:

$blogs = Blog::withCount('comments')
            ->where('comments_count', '>', 0)
            ->get();
总结

withCount() 方法是一个非常有用的聚合方法,它可以帮助我们减少查询数据库的次数,并能够提高应用程序的性能表现。它不仅可以以简单的方式聚合关联模型的计数值,而且还支持在筛选查询时使用。