急切加载多级类别

eager loading multi level categories

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

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

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

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

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

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

有什么办法吗?获得所有类别级别? 如果没有,如何在不预先加载的情况下获取一个集合中的所有级别的子类别?

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

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

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

就在你的关系中称呼你的关系。我的意思是递归地。 试试这个代码:

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