【问题标题】:How to sum nested relation attribute in Laravel?如何在 Laravel 中求和嵌套关系属性?
【发布时间】:2015-01-20 15:50:05
【问题描述】:

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

我的模型设置如下:

项目有很多任务。

任务有很多日志。

日志有一个属性“duration”。

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

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

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

【问题讨论】:

    标签: php laravel laravel-5


    【解决方案1】:

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

    【讨论】:

    • 我正在寻找相同的结果,但我有更深的关系链:有没有办法“建立”总和(我还需要通过关系添加一些 where 条件过滤不需要的行)而不创建HasManyRotugh ad-hoc 关系?
    猜你喜欢
    • 1970-01-01
    • 2021-08-16
    • 2021-08-27
    • 2021-08-05
    • 2019-06-17
    • 2018-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多