提取所有类别并按 parent id 对它们进行分组
Pulling all categories and grouping them by parent id
我正在使用 Laravel 数据查询,我需要一个查询来在我进行分类时对 parent 的所有 children 进行分组。
类别table有一个名称和一个parent_id,类别的路由parent_id设置为空,查询应该return每个类别分组通过 parent id 和 parent 应该是每个组的第一个节点。
当您从查询中获取返回的集合时,您可以使用 ->groupBy() 方法,您可以在该方法中指定结果应作为分组依据的字段。
假设您的类别模型是 Category
:
$categories = Category::all()->groupBy('parent_id')->toArray();
如果你只想在某个地方显示parent child的类别,你不需要那样收集它们,你可以在模型中建立关系,如
class Category {
public function children()
{
return $this->hasMany(self::class, 'parent_id');
}
public function parent()
{
return $this->hasMany(self::class, 'id', 'parent_id');
}
}
可能会是 one-to-many 关系而不是 many-to-many 取决于您的要求。
现在你可以得到所有 parents like
Category::whereNull('parent_id')->get();
或使用示波器
Category::parent()->get();
并在模型中定义范围
并循环 parent 类别,例如
@foreach ( $categories as $category )
{{ $category->name }}
@foreach ( $category->children as $subCategory )
{{ $subCategory->name }}
@endforeach
@endofreach
并用 children 检索 parent 你可以使用
Category::whereNull('parent_id')->with('children')->get();
或
Category::parent()->with('children')->get();
我没有测试代码,但大致会是这样。
我正在使用 Laravel 数据查询,我需要一个查询来在我进行分类时对 parent 的所有 children 进行分组。
类别table有一个名称和一个parent_id,类别的路由parent_id设置为空,查询应该return每个类别分组通过 parent id 和 parent 应该是每个组的第一个节点。
当您从查询中获取返回的集合时,您可以使用 ->groupBy() 方法,您可以在该方法中指定结果应作为分组依据的字段。
假设您的类别模型是 Category
:
$categories = Category::all()->groupBy('parent_id')->toArray();
如果你只想在某个地方显示parent child的类别,你不需要那样收集它们,你可以在模型中建立关系,如
class Category {
public function children()
{
return $this->hasMany(self::class, 'parent_id');
}
public function parent()
{
return $this->hasMany(self::class, 'id', 'parent_id');
}
}
可能会是 one-to-many 关系而不是 many-to-many 取决于您的要求。
现在你可以得到所有 parents like
Category::whereNull('parent_id')->get();
或使用示波器
Category::parent()->get();
并在模型中定义范围
并循环 parent 类别,例如
@foreach ( $categories as $category )
{{ $category->name }}
@foreach ( $category->children as $subCategory )
{{ $subCategory->name }}
@endforeach
@endofreach
并用 children 检索 parent 你可以使用
Category::whereNull('parent_id')->with('children')->get();
或
Category::parent()->with('children')->get();
我没有测试代码,但大致会是这样。