首页 > 解决方案 > Laravel 是否支持嵌套 GroupBy?

问题描述

我有一个类别表,其中包含“id”、“category_id”、“name”字段,其中“category_id”是父类别的 id。我的要求是我需要对下面的类别进行分组。

Europe
 - England
Asia
 - India
   - Kerala
     - Kochi

注意 - 这里欧洲、英格兰、亚洲、印度、喀拉拉邦、高知是类别。亚洲是印度的父类别,印度是喀拉拉邦的父类别,喀拉拉邦是高知的父类别。

是否有一些嵌套的 groupBy 解决方案?

标签: laravelgroup-by

解决方案


假设它是一对多的自引用关系,即一个类别只能属于另一个类别(单亲)

你的Category模型应该是这样的:

public function parent() {
   return $this->belongsTo('App\Category');
}

public function children() {
   return $this->hasMany('App\Category');
}

在您的main刀片模板中,您有:

  <ul class="navbar-nav">
       @foreach ($menu_items as $item)
             @include('menu', $item)
       @endforeach
  </ul>

$menu_items所有父类别的列表在哪里( category_id 为 null 或 0 的类别)

还有你的menu刀片模板:

@if ( $item->children->isNotEmpty() )
<li class="nav-item {{ $item->parents->isNotEmpty() ? 'dropdown-submenu' : 'dropdown' }}">
    <a class="nav-link dropdown-toggle" href="{{ $item->slug ? url($item->slug) : 'javascript:void(0);' }}" id="navbarDropdown{{ $item->id }}" role="button" data-toggle="hover">
        {{ $item->title }}
    </a>

    <ul class="dropdown-menu" aria-labelledby="navbarDropdown{{ $item->id }}">
        @foreach ($item->children as $item)

            @include('menu', $item)

        @endforeach
    </ul>
@else
<li class="nav-item">
    <a class="nav-link" href="{{ $item->slug ? url($item->slug) : 'javascript:void(0);' }}">{{ $item->title }}</a>
@endif
</li>

我从我最近从事的一个项目中粘贴了这段代码,让您了解嵌套下拉菜单,您必须自己处理样式部分。但是这段代码足以给你一个正确的理解。

PS:这一切都未经测试。让我知道是否有问题


推荐阅读