Php 当总和不使用get()时会产生什么影响?拉威尔5.3

Php 当总和不使用get()时会产生什么影响?拉威尔5.3,php,laravel,sum,laravel-5.3,laravel-eloquent,Php,Laravel,Sum,Laravel 5.3,Laravel Eloquent,我有一百万个数据 当我做sum时,像这样使用get(): $cache = Summary::where('type', $type) ->where('keys->year', '=', (string)$year) ->get(); $summary = $cache->sum('summary'); 非常慢 但是当我不使用get()而进行sum时,我会这样做: $cache = Summary::wh

我有一百万个数据

当我做
sum
时,像这样使用
get()

$cache = Summary::where('type', $type)
                ->where('keys->year', '=', (string)$year)
                ->get();
$summary = $cache->sum('summary');
非常慢

但是当我不使用
get()
而进行
sum
时,我会这样做:

$cache = Summary::where('type', $type)
                ->where('keys->year', '=', (string)$year);
$summary = $cache->sum('summary');
非常快

如果不使用
get
而使用
sum
是否可以?

如果使用->get(),则实际上是从数据库检索信息。如果您有很多行,这会大大降低查询速度

->sum()只对行求和,与->get()相比,该方法是轻量级的

如果您实际上不需要来自行的信息,而只需要所有行的总和,那么您应该只使用->sum()而不使用->get()。无需使用->get()即可使->sum()正常工作

包含以下示例:

$users = DB::table('users')->count();
$price = DB::table('orders')->max('price');
两者都不使用->获取()来->计数()或->最大值()

我想你甚至可以:

$sum = Summary::where('type', $type)->where('keys->year', '=', (string)$year)->sum();
使用get()获取所有数据,然后手动查找检索到的数据集合的总和。但是,如果不使用get()
,$cache
仍然是一个查询,那么对查询进行求和操作将在数据库上运行聚合查询,而不是提取所有数据

$summary = Summary::where('type', $type)
    ->where('keys->year', '=', (string)$year)
    ->sum('summary');

如果没有get(),你的语句就不会被执行。@Friedrich Roell,我做
sum
,如果没有
get
,它就被执行了。这是否意味着结论是可以完成的?没有效果?如果只想对行求和,则不使用->get()在本例中没有效果否。这是否意味着结论是可以这样做?没有效果。例如错误etc@samueltoh结论是,这是正确的方法,无需使用get()。没有错误或问题,这是正确的方法。