急于加载多级别类别

问题描述 投票:0回答:2

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

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

现在,我希望加载带有子类别的类别。代码

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

很好,但是它只有一个级别的子类别,我想急于加载所有级别。类似于

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

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

laravel categories eager-loading
2个回答
0
投票

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

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

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

0
投票

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

class Category extends Model
{
   public function subCategory()
   {
      return $this->hasMany(Category::class, 'parent_id')->with('subCategory');
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.