我想知道如何在Laravel中对多重嵌套关系的属性求和。我知道Laravel有一些很酷的和函数,如here所示,但想知道如何更深入地使用这一级别。
我的模型设置如下:
项目有很多任务。
任务包含许多日志。
日志的属性为“持续时间”。
我查询了项目,并在html表中迭代项目。我想显示日志持续时间的总和。我想也许我可以这样做:
$project->tasks->logs->sum('duration')
但是那不行。这可能与这样一条优雅的线条有关,还是我必须设置一个循环并“手动”求和?
答案 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惯例,请调整它们。