2 回答
TA贡献1801条经验 获得超15个赞
该指南有些有效,但最后我使用了一个有用的包 [lazychaser / laravel-nestedset][1]
这使得使用类别和子类别变得更加容易
$categories = Category::with('descendants')->get()->toTree();
要不就
$categories = Category::with('descendants')->get()->toFlatTree();
你也可以用祖先代替后代 就这么简单
[1]:https://github.com/lazychaser/laravel-nestedset
TA贡献1809条经验 获得超8个赞
我建议将逻辑转移到相关类中,以便更容易理解您在做什么。
控制器:
public function get(Category $category): Collection
{
return (new GetAllCategories($category))->handle();
}
模型
public function children(): HasMany
{
return $this->hasMany(Category::class, 'parent_id', 'id');
}
GetAllCategories 操作类。这个类将循环遍历每个孩子并返回相关的孩子。
public function handle(): Collection
{
return $this->buildCategory($this->category);
}
protected function buildCategory(Category $category): Collection
{
return collect([
'category' => $category,
'children' => $this->getChildren($category),
]);
}
protected function getChildren(Category $category): Collection
{
return $category
->children
->map(fn($child) => $this->buildCategory($child));
}
我没有添加use语句、__consturct方法或路由绑定。我假设您使用的是 php7.4 和 laravel 7.*
- 2 回答
- 0 关注
- 114 浏览
添加回答
举报