Lumen/Laravel:计算每一个嵌套关系
Lumen/Laravel: count every nested relationship
我在 Lumen 8 中有这些嵌套关系,我正在寻找一个 Eloquent 解决方案,如果可能的话,以显示每个嵌套关系的计数。
程序 ->(hasMany) 文档 ->(hasMany) 文档文件
我想计算 DocumentFiles 但在 Documents 上。 (字段 document_files_count)
所以如果我有 1 个过程和 2 个文档,每个文档有 1 个文件,我想在每个文档对象上有一个 document_files_count 计数 1.
这就像我在返回过程对象时所期望的那样:
{
"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",
"documents_count": 1,
"documents": [
{
"id": 1,
"procedure_id": 1,
"title": "docname",
"description": "Lorem ipsum ",
"document_files_count": 1
"document_files": [
{
"id": 1,
"document_id": 1,
"path": "path_to_file",
"extension": null,
"size": 34020,
}
]
},
{
"id": 2,
"procedure_id": 1,
"title": "docname2",
"description": "Lorem ipsum 2",
"document_files_count": 1
"document_files": [
{
"id": 1,
"document_id": 1,
"path": "path_to_file",
"extension": null,
"size": 34020,
}
]
}
]
}
我还在 Procedure 模型中设置了一个 hasManyThrough 关系,以从 Procedure.. 访问文档文件数据。但是 withCount(['documentFiles']) 显然给我的是一般过程文档,而不是每个文档的文件计数。
public function documentFiles(){
return $this->hasManyThrough(DocumentFile::class, Document::class);
}
非常感谢!!
如果你有 HasMany
(或相反)关系,你可以做 NAME_OF_RELATION_count
。在您的情况下,它将是 documentFiles_count
,这将返回特定关系所具有的模型数量。
所以,假设你想得到每个数字,你可以这样做:
$procedures = Procedure::with('documents.documentsFiles')->all();
$eachDocumentsFiles = collect();
foreach ($procedures as $procedure) {
foreach ($procedure->documents as $document) {
$eachDocumentsFiles->push($document->documentFiles_count);
}
}
请记住,这段代码不是 100% 高效的,我只是那样编码,因为我没有代码可以使用。但魔术是使用 ->relation_name_count
,在你的情况下 ->documentFiles_count
.
如果这不起作用,您将不得不使用 withCount
(但我不确定它是否在 Lumen 中可用)。
我在 Lumen 8 中有这些嵌套关系,我正在寻找一个 Eloquent 解决方案,如果可能的话,以显示每个嵌套关系的计数。
程序 ->(hasMany) 文档 ->(hasMany) 文档文件
我想计算 DocumentFiles 但在 Documents 上。 (字段 document_files_count)
所以如果我有 1 个过程和 2 个文档,每个文档有 1 个文件,我想在每个文档对象上有一个 document_files_count 计数 1.
这就像我在返回过程对象时所期望的那样:
{
"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",
"documents_count": 1,
"documents": [
{
"id": 1,
"procedure_id": 1,
"title": "docname",
"description": "Lorem ipsum ",
"document_files_count": 1
"document_files": [
{
"id": 1,
"document_id": 1,
"path": "path_to_file",
"extension": null,
"size": 34020,
}
]
},
{
"id": 2,
"procedure_id": 1,
"title": "docname2",
"description": "Lorem ipsum 2",
"document_files_count": 1
"document_files": [
{
"id": 1,
"document_id": 1,
"path": "path_to_file",
"extension": null,
"size": 34020,
}
]
}
]
}
我还在 Procedure 模型中设置了一个 hasManyThrough 关系,以从 Procedure.. 访问文档文件数据。但是 withCount(['documentFiles']) 显然给我的是一般过程文档,而不是每个文档的文件计数。
public function documentFiles(){
return $this->hasManyThrough(DocumentFile::class, Document::class);
}
非常感谢!!
如果你有 HasMany
(或相反)关系,你可以做 NAME_OF_RELATION_count
。在您的情况下,它将是 documentFiles_count
,这将返回特定关系所具有的模型数量。
所以,假设你想得到每个数字,你可以这样做:
$procedures = Procedure::with('documents.documentsFiles')->all();
$eachDocumentsFiles = collect();
foreach ($procedures as $procedure) {
foreach ($procedure->documents as $document) {
$eachDocumentsFiles->push($document->documentFiles_count);
}
}
请记住,这段代码不是 100% 高效的,我只是那样编码,因为我没有代码可以使用。但魔术是使用 ->relation_name_count
,在你的情况下 ->documentFiles_count
.
如果这不起作用,您将不得不使用 withCount
(但我不确定它是否在 Lumen 中可用)。