Lumen/Laravel:计算每个嵌套关系
Posted
技术标签:
【中文标题】Lumen/Laravel:计算每个嵌套关系【英文标题】:Lumen/Laravel: count every nested relationship 【发布时间】:2021-09-03 08:13:05 【问题描述】:我在 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);
非常感谢!!
【问题讨论】:
【参考方案1】:如果你有一个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/Laravel:计算每个嵌套关系的主要内容,如果未能解决你的问题,请参考以下文章
Lumen/Laravel Eloquent - 按数据透视表中的属性过滤
Lumen (Laravel) VS NODE.JS 解决方案
如何在 LUMEN 中使用 GATE 立面(Laravel 6.2)