我正在使用Laravel数据查询,我需要一个查询,当我获取类别时,该查询将对父级的所有子项进行分组。
categories表有一个名称和一个parent_id,类别的路由的parent_id设置为null,查询应该返回按父id分组的每个类别,并且父节点应该是每个组的第一个节点。
发布于 2019-04-16 20:33:43
如果您只想在某个地方将类别显示为父子类别,则不需要像这样收集它们,您可以在模型中建立如下关系
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();我还没有测试代码,但大致是这样的。
发布于 2019-04-16 17:57:30
当您从查询中获得返回的集合时,您可以使用->groupBy()方法,在该方法中,您可以指定结果分组所依据的字段。
假设您的类别模型为Category
$categories = Category::all()->groupBy('parent_id')->toArray();https://stackoverflow.com/questions/55704112
复制相似问题