我的导航栏具有未知行业水平,可以拥有童工行业,我想写出递归关系以获得最高级别并将其显示为类别。我试过这个:
public function category()
{
if($this->parent_id == 0){
return $this;
} else {
$this->parent_industry->category();
}
}
但我一直在努力 LogicException:关系方法必须返回类型为Illuminate \ Database \ Eloquent \ Relations \ Relation
的对象如何编写递归关系并返回 $ this ?
答案 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;
}
使用递归会更简单。
希望这有帮助。