急切加载多级类别
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');
}
}
我有一个类别 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');
}
}