我正在使用Laravel数据查询,我需要一个查询,当我选择类别时,该查询将对父母的所有孩子进行分组。
类别表有一个名称和parent_id,类别的路由将parent_id设置为null,查询应返回按父ID分组的每个类别,并且父级应是每个组的第一个节点。
答案 0 :(得分:0)
从查询中获取返回的集合时,您可以使用->groupBy()方法,在其中可以指定结果的分组依据字段。
假设您的类别模型为SELECT SUM(cash) AS money FROM Table t1, Table2 t2 WHERE t1.branch = t2.branch
AND t1.transID = t2.transID
AND ValueDate > @startMonthDate HAVING money > 0;
:
Category
答案 1 :(得分:0)
如果您只想将类别显示为父级类别,则无需像这样收集它们,则可以在模型中建立关系
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();
我还没有测试代码,但是大致会是这样。