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'))
我在 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'))