首页 > 解决方案 > 急切加载多级类别

问题描述

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

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

现在我想急切地加载带有子类别的类别。编码

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

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

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

有什么办法吗?获得所有类别级别?如果没有,如何在一个集合中获取所有级别的子类别而无需急切加载?

标签: laravelcategorieseager-loading

解决方案


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

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

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

推荐阅读