簡體   English   中英

如何急切加載嵌套關系而不是在頂層重復它們?

[英]how to eager loading nested relations and not repeat them at top level?

a 有一個包含以下字段的評論表:id、body、parent_id

每個評論都可以有評論,這就是為什么它有一個 parent_id 列。

class Comment extends Model
{
    public function comments()
    {
        return $this->HasMany($this, 'parent_id');
    }
}

它最多只能有兩個級別的子評論。

在我的 controller 中,我以這種方式檢索信息:

return Comment::with('comments.comments')->get();

得到的響應是這樣的:

[
    {
        "id": 1,
        "body": "test",
        "parent_id": null,
        "comments": [
            {
                "id": 2,
                "body": "test",
                "parent_id": 1,
                "comments": [
                    {
                        "id": 3,
                        "body": "test",
                        "parent_id": 2
                    },
                    {
                        "id": 4,
                        "body": "test",
                        "parent_id": 2
                    }
                ]
            },
            {
                "id": 5,
                "body": "test",
                "parent_id": 1,
                "comments": []
            }
        ]
    },
    {
        "id": 2,
        "body": "test",
        "parent_id": 1,
        "comments": [
            {
                "id": 3,
                "body": "test",
                "parent_id": 2,
                "comments": []
            },
            {
                "id": 4,
                "body": "test",
                "parent_id": 2,
                "comments": []
            }
        ]
    },
    {
        "id": 3,
        "body": "test",
        "parent_id": 2,
        "comments": []
    },
    {
        "id": 4,
        "body": "test",
        "parent_id": 2,
        "comments": []
    },
    {
        "id": 5,
        "body": "test",
        "parent_id": 1,
        "comments": []
    },
    {
        "id": 6,
        "body": "test",
        "parent_id": null,
        "comments": []
    }    
]

我要檢索的是:

[
    {
        "id": 1,
        "body": "test",
        "parent_id": null,
        "comments": [
            {
                "id": 2,
                "body": "test",
                "parent_id": 1,
                "comments": [
                    {
                        "id": 3,
                        "body": "test",
                        "parent_id": 2
                    },
                    {
                        "id": 4,
                        "body": "test",
                        "parent_id": 2
                    }
                ]
            },
            {
                "id": 5,
                "body": "test",
                "parent_id": 1,
                "comments": []
            }
        ]
    },
    {
       "id": 6,
       "body": "test",
       "parent_id": null,
       "comments": []
    }       
]

我希望子評論不要在頂層再次重復,我該怎么辦? 謝謝你。

將 whereNull('parent_id') 添加到您的頂級查詢。

return Comment::whereNull('parent_id')->with('comments.comments')->get();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM