渴望加载多级类别

时间:2019-02-17 12:45:39

标签: laravel categories eager-loading

我有一个带parent_id的类别表,用于存储类别和子类别。此类别可以是多级的,这意味着类别可以具有子类别,每个子类别可以具有子类别,依此类推。而且它是动态的,因此级别数不受限制。我在类别模型中定义了一个函数,名称如下:

public function childs()
{
    return $this->hasMany(Category::class, 'parent_id');
}

现在我想急于加载带有子类别的类别。代码

$cats = Category::with('childs')->get();

效果很好,但它只有一个子类别级别,我想急于加载所有级别。像

$cats = Category:with('childs')->with('childs')... ->get();

有没有办法做到这一点?获取所有类别级别? 如果没有,如何在一个集合中获得所有级别的子类别而又不急于加载?

2 个答案:

答案 0 :(得分:0)

您可以使用它来加载所有子类别

class Category extends Model
{
    public function children()
    {
        return $this->hasMany($this, 'parent_id');
    }

    public function childrenTree()
    {
        return $this->children()->with('childrenTree');
    }
}

答案 1 :(得分:0)

只需将您的关系与您的关系联系起来。我的意思是递归。 尝试以下代码:

class Category extends Model
{
   public function subCategory()
   {
      return $this->hasMany(Category::class, 'parent_id')->with('subCategory');
    }
}