如何对 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 约定,请调整它们。
我想知道如何对 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 约定,请调整它们。