【发布时间】:2020-11-03 21:27:33
【问题描述】:
我有以下表结构:
Categories
id | title | parent_id | order | active
1 example null 1 1
2 example 1 null 1
3 example 2 null 1
我需要检索一个集合中的所有子类别,因此我有两个函数:
public function children()
{
return $this->hasMany('App\Category', 'parent_id')
->where('active', 1);
}
public function childrenRecursive()
{
return $this->children()->with('childrenRecursive');
}
我运行Category::find(1)->childrenRecursive 并且必须获得所有子类别,但我只获得 1 级嵌套类别。有什么问题?
附: Laravel 6.18.22
【问题讨论】:
-
请将
dd(Category::with('childrenRecursive')->find(1)->toArray())的输出添加到您的问题中(有或没有toArray();我发现使用toArray()更容易阅读输出,但如果您愿意,可以省略)跨度> -
它返回相同的结果,1级嵌套类别,我检查了它
-
您没有将其添加到您的问题中是否有原因?我想帮忙,但如果你不愿意添加,我不能。
-
我可以添加这个,但在我的项目中其他真实类别与问题示例不同。它返回额外的
childrenRecursive字段,其中还包含 1 级嵌套类别 -
我要求您添加该输出的原因是,我可以向您展示关系实际上是递归加载的,而且您实际上必须遍历所有内容(再次,递归)以获得不止一个层次的深度。每条记录都可以有一个正确的
children,并且调用$category->children不会深入到所有级别。请与要求澄清的人合作,否则您会妨碍我们为您提供帮助。此外,childrenRecursive是递归关系加载器;您不要在实例上调用它,而是使用->children。