如何对 Laravel 中的嵌套关​​系属性求和?

How to sum nested relation attribute in Laravel?

我想知道如何对 Laravel 中的多重嵌套关系的属性求和。我知道 Laravel 有一些很酷的求和函数,如图 here 所示,但我想知道如何更深一层。

我的模型设置如下:

项目有很多任务。

任务有很多日志。

日志 有一个属性 "duration."

我查询了项目并在 html table 中迭代项目。我想显示日志持续时间的总和。我在想也许我可以做类似的事情:

$project->tasks->logs->sum('duration')

但这不行。这可能与像这样的一条优雅的线条有关,还是我必须设置一个循环并求和 "manually"?

根据你的问题,我假设你有一系列 hasMany 关系,所以没有比这更简单的了:

// Project model
public function logs()
{
  return $this->hasManyThrough('Log', 'Task');
  // defaults to:
  // return $this->hasManyThrough('Log', 'Task', 'project_id', 'task_id');
}

// then sum on the query
$project->logs()->sum('duration');

// or on the collection, but don't do it unless you really need that collection
$project->logs->sum('duration');

您可以看到 Eloquent 将在模型上查找的默认值 foreign keys,因此如果您不遵守 Laravel 约定,请调整它们。