laravel - 急切加载多级类别
问题描述
我有一个带有 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();
有什么办法吗?获得所有类别级别?如果没有,如何在一个集合中获取所有级别的子类别而无需急切加载?
解决方案
您可以使用它来加载所有子类别
class Category extends Model
{
public function children()
{
return $this->hasMany($this, 'parent_id');
}
public function childrenTree()
{
return $this->children()->with('childrenTree');
}
}
推荐阅读
- javascript - PaperJS - 如何沿路径移动并沿路径旋转
- javascript - 将所有子项标记为已选中
- android - 包含方法返回总是假的?
- c# - Vuforia Video Playback 在 Unity 应用程序中闪烁?
- c# - 如何在当前运行空间中获取和设置变量?(基于 cmdlet 的模块)
- recursion - 如何记住最小硬币问题的这种重复?
- node.js - CoreMongooseArray 到普通数组
- flutter - 颤振:如何发现对继承小部件的依赖关系?
- typescript - Typescript 会抛出一个导入语句格式错误,因为 webpack 需要这种格式。如何阻止这种情况?
- javascript - Reactjs 组件生命周期 - 从用户输入中获取数据