Laravel递归关系并返回$ this

时间:2018-01-25 17:39:06

标签: php laravel recursion relationship

我的导航栏具有未知行业水平,可以拥有童工行业,我想写出递归关系以获得最高级别并将其显示为类别。我试过这个:

public function category()
{
    if($this->parent_id == 0){
        return $this;
    } else {
        $this->parent_industry->category();
    }
}

但我一直在努力 LogicException:关系方法必须返回类型为Illuminate \ Database \ Eloquent \ Relations \ Relation

的对象

如何编写递归关系并返回 $ this

2 个答案:

答案 0 :(得分:3)

尝试这种关系:

public function children()
{
    return $this->hasMany('App\MenuItem', 'parent_id');
}

public function parent()
{
    return $this->belongsTo('App\MenuItem', 'parent_id');
}

public function getRoot()
{
    $cur = $this;
    while ($cur->parent) {
        $cur = $cur->parent;
    }
    return $cur;
}

答案 1 :(得分:1)

您好,您可以轻松而不是使用

public function children()
{
   return $this->hasMany('App\MenuItem', 'parent_id');
}

public function parent()
{
   return $this->belongsTo('App\MenuItem', 'parent_id');
}

public function root()
{
    if ($this->parent)
        return $this->parent->root();

    return $this;
}

使用递归会更简单。

希望这有帮助。