拉出所有类别并按父ID分组

时间:2019-04-16 08:48:47

标签: laravel eloquent laravel-5.8 eloquent--relationship

我正在使用Laravel数据查询,我需要一个查询,当我选择类别时,该查询将对父母的所有孩子进行分组。

类别表有一个名称和parent_id,类别的路由将parent_id设置为null,查询应返回按父ID分组的每个类别,并且父级应是每个组的第一个节点。

2 个答案:

答案 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();

我还没有测试代码,但是大致会是这样。