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

时间:2015-01-20 15:50:06

标签: php laravel laravel-5

我想知道如何在Laravel中对多重嵌套关系的属性求和。我知道Laravel有一些很酷的和函数,如here所示,但想知道如何更深入地使用这一级别。

我的模型设置如下:

项目有很多任务。

任务包含许多日志。

日志的属性为“持续时间”。

我查询了项目,并在html表中迭代项目。我想显示日志持续时间的总和。我想也许我可以这样做:

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

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

1 个答案:

答案 0 :(得分:5)

根据你的问题,我假设你有一系列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惯例,请调整它们。