Php 拉取所有类别并按父id将其分组

Php 拉取所有类别并按父id将其分组,php,laravel,eloquent,laravel-5.8,eloquent-relationship,Php,Laravel,Eloquent,Laravel 5.8,Eloquent Relationship,我正在处理Laravel数据查询,我需要一个查询,该查询将在我获取类别时对父级的所有子级进行分组 categories表具有名称和父id,类别的路由的父id设置为null,查询应返回按父id分组的每个类别,父类别应为每个组的第一个节点。从查询中获取返回的集合时,您可以使用该方法,在该方法中,您可以指定结果分组依据的字段 假设您的类别模型是类别: $categories = Category::all()->groupBy('parent_id')->toArray(); 当您从查询

我正在处理Laravel数据查询,我需要一个查询,该查询将在我获取类别时对父级的所有子级进行分组


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

从查询中获取返回的集合时,您可以使用该方法,在该方法中,您可以指定结果分组依据的字段

假设您的类别模型是
类别

$categories = Category::all()->groupBy('parent_id')->toArray();

当您从查询中获取返回的集合时,您可以使用该方法,在该方法中,您可以指定结果分组所依据的字段

假设您的类别模型是
类别

$categories = Category::all()->groupBy('parent_id')->toArray();

如果您只想在某个位置将类别显示为父子类别,则不需要像这样收集它们,您可以在模型中建立关系,如

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


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

如果您只想在某个地方将类别显示为父子类别,您不需要像这样收集它们,您可以在模型中建立一个关系,如

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


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

检查:这不是一个嵌套集,最大深度将是父级和子级,因此深度是一个。@EndritSheholli您解决了问题吗?检查:这不是一个嵌套集,最大深度将是父级和子级,所以深度是一。@EndritSheholli问题解决了吗?这不会返回嵌套集合。它将所有类别分组,没有父类别,然后所有类别的父类别id为1,等等。OP:
应返回按父类别id分组的每个类别,父类别应为每个组的第一个节点
这不会返回嵌套集合。它将所有类别分组,没有父类别,然后将所有类别分组,父类别id为1,等等。OP:
应返回按父类别id分组的每个类别,父类别应为每个组的第一个节点