【问题标题】:Laravel recursive relationships don't workLaravel 递归关系不起作用
【发布时间】: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

标签: laravel eloquent


【解决方案1】:

这段代码应该会有所帮助:

    Category::where('id', 1)->with('childrenRecursive')->get();

    Category::where(['active'=> 1, 'parent_id' => null])->with('childrenRecursive')->get();

【讨论】:

  • 你应该添加一个理由为什么这是一个很好的答案。这将有助于回答问题,并让有类似问题的其他人弄清楚他们的代码为什么不起作用。
猜你喜欢
  • 2021-05-20
  • 2014-12-26
  • 1970-01-01
  • 1970-01-01
  • 2015-09-24
  • 2022-01-21
  • 2017-07-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多