我有一个模型 CourseModule
,每个项目都与同一个模型相关。
数据库结构:
模型中的关系:
public function parent()
{
return $this->belongsTo('App\CourseModule','parent_id')->where('parent_id',0);
}
public function children()
{
return $this->hasMany('App\CourseModule','parent_id');
}
我尝试了以下方法,但它只返回单一级别的关系。
试过:
CourseModule::with('children')->get();
我正在尝试创建如下所示的 json 输出,
预期输出:
[
{
"id": "1",
"parent_id": "0",
"course_id": "2",
"name": "Parent",
"description": "first parent",
"order_id": "1",
"created_at": "-0001-11-30 00:00:00",
"updated_at": "-0001-11-30 00:00:00",
"children": [
{
"id": "2",
"parent_id": "1",
"course_id": "2",
"name": "Child 1",
"description": "child of parent",
"order_id": "2",
"created_at": "-0001-11-30 00:00:00",
"updated_at": "-0001-11-30 00:00:00",
"children": [
{
"id": "3",
"parent_id": "2",
"course_id": "2",
"name": "Child2",
"description": "child of child1",
"order_id": "2",
"created_at": "-0001-11-30 00:00:00",
"updated_at": "-0001-11-30 00:00:00",
"children": [
{
"id": "4",
"parent_id": "3",
"course_id": "2",
"name": "Child 3",
"description": "child of child 2",
"order_id": "2",
"created_at": "-0001-11-30 00:00:00",
"updated_at": "-0001-11-30 00:00:00",
"children": []
}
]
}
]
}
]
}
]
我不明白如何获取内部子对象。
原文由 Kiran LM 发布,翻译遵循 CC BY-SA 4.0 许可协议
如果你有这样的未知深度,你将不得不递归地获取孩子。
另一种选择是使用 嵌套集模型 而不是 _邻接表模型_。您可以使用类似
baum/baum
的 Laravel 包来嵌套集。使用此包,您可以使用
getDescendants
等方法获取所有子项和嵌套子项,以及toHierarchy
获取完整的树层次结构。维基百科 - 嵌套集模型
Baum - Laravel Eloquent ORM 的嵌套集模式
在 MySQL 中管理分层数据