首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >->get ->count() vs ->count()

->get ->count() vs ->count()
EN

Stack Overflow用户
提问于 2017-12-02 22:24:36
回答 6查看 47.2K关注 0票数 16

为什么下面的两个语句表现为differentlY?第一个返回3,第二个返回$progress的1。我认为第一个聚合在数据库上,第二个聚合在服务器上。所以它们应该仍然返回相同的值。

代码语言:javascript
运行
复制
$progress = $this->user->userActivities()->select('date')
                ->groupBy('date')
                ->get()->count();

$progress =  $this->user->userActivities()->select('date')
                ->groupBy('date')
                ->count();
EN

回答 6

Stack Overflow用户

发布于 2017-12-03 00:10:32

->get()->count()会将雄辩的模型对象加载到内存中,然后对这些对象进行计数。

->count()将使用DB聚合函数,因此它肯定会更高效:

代码语言:javascript
运行
复制
select count(*) as aggregate ...
票数 24
EN

Stack Overflow用户

发布于 2020-12-20 17:00:09

现在回答已经很晚了,但我也遇到过同样的问题。由于您使用的是groupBy,这两个示例返回两个不同的计数。

代码语言:javascript
运行
复制
$progress = $this->user->userActivities()->select('date')
            ->groupBy('date')
            ->get()->count();

这将首先获取行数,然后计算行数并返回计数。

代码语言:javascript
运行
复制
$progress =  $this->user->userActivities()->select('date')
            ->groupBy('date')
            ->count();

而这将按其在DB中的组对行进行计数,并仅从列表中返回第一组的行记录计数。

对于我的案例,我使用的解决方案不是get()->count(),而是如下

代码语言:javascript
运行
复制
$progress =  $this->user->userActivities()
            ->distinct('date')
            ->count('date');
票数 8
EN

Stack Overflow用户

发布于 2017-12-02 22:49:14

第一个函数计算返回的记录数,第二个函数计算记录数并返回记录数。例如,如果您使用的分页为10,那么如果计算元素的数量大于10,则第一个分页将产生10,第二个分页将产生实际数量。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47608873

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档