【问题标题】:Lumen/Laravel: count every nested relationshipLumen/Laravel:计算每个嵌套关系
【发布时间】: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);
}

非常感谢!!

【问题讨论】:

    标签: laravel eloquent lumen


    【解决方案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 中可用)。

    【讨论】:

      猜你喜欢
      • 2021-08-16
      • 2014-10-27
      • 2021-05-22
      • 1970-01-01
      • 1970-01-01
      • 2021-07-19
      • 2019-06-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多