Lumen/Laravel:嵌套关系求和

Lumen/Laravel: sum on nested relationships

我在 Lumen 8 中得到了这些嵌套关系,我正在寻找一种做得很好的 Eloquent 方式来显示文件大小的总和,但在父级关系上。 这就是我的情况:

程序 ->(hasMany) 文档 ->(hasMany) 文档文件

我想对 DocumentFiles->size 求和,但要在 Procedure 上求和。 (字段 procedure_files_size) 如果可能的话,我还想显示单个文档的总和。 (字段document_files_size)

这就像我在返回过程对象时所期望的那样:

{
    "id": 1,
    "title": "Exercitationem ea distinctio consectetur.",
    "description": "Deserunt perferendis impedit laboriosam nemo hic unde est et. Quia dolores tempora incidunt iste dolor fugiat harum quae. Ducimus sit quo ut recusandae rerum qui.",
    "expiry": "2021-05-31 04:51:15",
    "status": "hidden",
    "created_at": "2021-05-27T13:47:32.000000Z",
    "updated_at": "2021-05-27T13:47:32.000000Z",
    "users_count": 2,
    "documents_count": 5,
    "procedure_files_size": 1240000
    "users": [
        {
            "id": 1,
            "email": "user@user.com",
            "name": "name",
            "surname": "surname",
        }
    ],
    "documents": [
        {
            "id": 1,
            "procedure_id": 1,
            "title": "docname",
            "description": "Lorem ipsum ",
            "priority": "standard",
            "created_at": "2021-05-27T13:49:31.000000Z",
            "updated_at": "2021-05-27T13:49:31.000000Z",
            "document_files_size": 1240000,
            "document_files": [
                {
                    "id": 1,
                    "document_id": 1,
                    "path": "path_to_file",
                    "extension": null,
                    "size": 34020,
                    "created_at": "2021-05-27T13:51:25.000000Z",
                    "updated_at": "2021-05-27T13:51:25.000000Z"
                }
            ]
        }
    ]
}

我尝试过类似的方法但没有成功:

Procedure::with(['users','documents.documentFiles'])->withCount('users')->withSum('documents.documentFiles','size'))->find(1);

谢谢!!

在您的 Procedure 模型上,作为 documentFiles 作为 hasManyThrough 关系。

class Procedure {
    public function documentFiles() {
        return $this->hasManyThrough(DocumentFile::class, Document::class);
    }
}

现在您应该可以在该关系上使用 withSum()

->withSum('documentFiles','size'))