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

tim*_*myc 2 php laravel laravel-5

我想知道如何在Laravel中总结多重嵌套关系的属性.我知道,Laravel有一些很酷的功能和如图所示这里,但不知道如何采取更深一层.

我的模型设置如下:

项目有很多任务.

任务有很多日志.

日志具有"持续时间"属性.

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

$project->tasks->logs->sum('duration')
Run Code Online (Sandbox Code Playgroud)

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

Jar*_*zyk 6

从你的问题我假设你有一系列的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');
Run Code Online (Sandbox Code Playgroud)

您可以看到foreign keysEloquent在模型上寻找的默认值,因此如果您不遵守Laravel惯例,请调整它们.