我正在使用 Laravel 数据查询,我需要一个查询,当我获取类别时,它将对父级的所有子级进行分组。
类别表有一个名称和一个 parent_id,类别的路由将 parent_id 设置为 null,查询应该返回按父 id 分组的每个类别,并且父节点应该是每个组的第一个节点。
我正在使用 Laravel 数据查询,我需要一个查询,当我获取类别时,它将对父级的所有子级进行分组。
类别表有一个名称和一个 parent_id,类别的路由将 parent_id 设置为 null,查询应该返回按父 id 分组的每个类别,并且父节点应该是每个组的第一个节点。
如果您只想在某处将类别显示为父子项,则不需要像那样收集它们,您可以在模型中建立关系,例如
class Category {
public function children()
{
return $this->hasMany(self::class, 'parent_id');
}
public function parent()
{
return $this->hasMany(self::class, 'id', 'parent_id');
}
}
根据您的要求,可能是一对多的关系而不是多对多的关系。
现在你可以让所有的父母都喜欢
Category::whereNull('parent_id')->get();
或使用范围
Category::parent()->get();
并在模型中定义范围
并遍历父类别,例如
@foreach ( $categories as $category )
{{ $category->name }}
@foreach ( $category->children as $subCategory )
{{ $subCategory->name }}
@endforeach
@endofreach
并检索带孩子的父母,您可以使用
Category::whereNull('parent_id')->with('children')->get();
或者
Category::parent()->with('children')->get();
我没有测试过代码,但大致会是这样。
当您从查询中获取返回的集合时,您可以使用->groupBy()方法,您可以在其中指定结果应该分组的字段。
假设您的类别模型是Category
:
$categories = Category::all()->groupBy('parent_id')->toArray();