簡體   English   中英

如何使用自定義查詢急切加載 Laravel 中的嵌套關系?

[英]how to eager loading nested relationships in Laravel with custom query?

我有一個評論表,其中包含以下字段:id、body、parent_id。 評論可以有子評論,這就是它使用 parent_id 字段的原因,我想知道如何實現這個嵌套結果:

[
    {
        "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": []
    }       
]

不使用 eloquent 預加載( with() ),只使用查詢生成器,謝謝。

由於可能的答案可能太長,我將其直接發布為答案。 您可以通過在 controller 中創建遞歸方法來實現此目的,如下所示:

public function commentsLoop($data, $parent = null) {
    $comments = [];

    foreach ($data as $d) {
        if($d['parent_id'] == $parent){
            $subComment = commentsLoop($data, $d['id']);
            
            if ($subComment) {
                $d['comments'] = $subComment;
            }

            $comments[] = $d;
        }
    }

    return $comments;
}

然后,您可以從 controller 中的主要方法調用它,如下所示:

public function comments(){
    $data = DB::table('comments')->all()->toArray();
    
    return $this->commentsLoop($data);
}

暫無
暫無

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

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