Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Laravel 拉威尔->;计数()与->;获取()->;计数()_Laravel_Eloquent - Fatal编程技术网

Laravel 拉威尔->;计数()与->;获取()->;计数()

Laravel 拉威尔->;计数()与->;获取()->;计数(),laravel,eloquent,Laravel,Eloquent,为什么下面的两种说法表现不同?第一个返回3,第二个返回1表示$progress。我认为第一个聚合在DB上,第二个聚合在服务器上。所以它们仍然应该返回相同的值 $progress = $this->user->userActivities()->select('date') ->groupBy('date') ->get()->count(); $progress = $this->use

为什么下面的两种说法表现不同?第一个返回3,第二个返回1表示$progress。我认为第一个聚合在DB上,第二个聚合在服务器上。所以它们仍然应该返回相同的值

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

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

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

->get()->count()
将把有说服力的模型对象加载到内存中,然后对这些对象进行计数

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

select count(*) as aggregate ...
使用
->get()->count()
是错误的。我在我的web应用程序中使用了
->get()->count()
,当我的数据库记录超过80000条时,我的应用程序中出现错误500条。

$count=Model::all()->count();
返回视图(“主视图”,压缩视图(“计数”);

这将适用于laravel 6

它们都返回相同的结果。但正如所说,为了防止崩溃或降低响应速度,最好使用
count()
而不是
get()->count()

这是一个很晚的答案,但我也遇到了同样的问题。这两个示例返回两个不同的计数,因为您使用了groupBy

$progress = $this->user->userActivities()->select('date')
            ->groupBy('date')
            ->get()->count();
这将首先获取行,然后计算行号并返回计数

$progress =  $this->user->userActivities()->select('date')
            ->groupBy('date')
            ->count();
而这将按其在数据库中的组对行进行计数,并仅从列表中返回第一个组的行记录计数

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

$progress =  $this->user->userActivities()
            ->distinct('date')
            ->count('date');

相反,第一个是PHP中的集合计数,第二个是DB中的行计数。然而,我从未见过他们会以不同的方式返回,第二种方式肯定会更有效。get()实际返回什么?