[英]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.