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

问题描述 投票:0回答:2

我正在使用Laravel数据查询,我需要一个查询,当我获取类别时,它将对父项的所有子项进行分组。

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

laravel eloquent laravel-5.8 eloquent--relationship
2个回答
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();

我没有测试过代码,但大致就是这样。


0
投票

从查询中获取返回的集合时,您可以使用->groupBy()方法,您可以在其中指定结果应按其分组的字段。

假设您的类别模型是Category

$categories = Category::all()->groupBy('parent_id')->toArray();
© www.soinside.com 2019 - 2024. All rights reserved.