我与Laravel数据查询工作,我需要一个查询,这是要分组的所有孩子的父母时,我采取的类别。categories表具有名称和parent_id,categories的路由具有设置为空的parent_id,查询应当返回由父id分组的每个类别,并且父应当是每个组的第一节点。
z3yyvxxp1#
如果您只想将类别显示为某个位置的父子类别,则不需要像这样收集它们,您可以在模型中建立如下关系
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();并在模型中定义范围并循环遍历父类别
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();
我还没有测试代码,但大致上是这样的。
vnzz0bqm2#
控制器
$locations = OurLocation::groupBy('country_id')->with('children')->get();
模型
public function children() { return $this->hasMany(OurLocation::class, 'country_id','country_id'); }
叶片
@foreach($locations as $index=>$location) @foreach($location->children as $children) {{ $children->company_name }} <br> @endforeach @endforeach
avwztpqn3#
当您从查询中获得返回的集合时,您可以使用-〉groupBy()方法,在该方法中,您可以指定结果分组所依据的字段。假设你的分类模型是Category:
Category
$categories = Category::all()->groupBy('parent_id')->toArray();
3条答案
按热度按时间z3yyvxxp1#
如果您只想将类别显示为某个位置的父子类别,则不需要像这样收集它们,您可以在模型中建立如下关系
可能是一对多关系而不是多对多关系,这取决于您的要求。
现在你可以让所有的家长
或者使用示波器
Category::parent()->get();
并在模型中定义范围并循环遍历父类别
并检索具有子项的父项,您可以使用
或
我还没有测试代码,但大致上是这样的。
vnzz0bqm2#
控制器
模型
叶片
avwztpqn3#
当您从查询中获得返回的集合时,您可以使用-〉groupBy()方法,在该方法中,您可以指定结果分组所依据的字段。
假设你的分类模型是
Category
: