Php laravel 5多级菜单?

Php laravel 5多级菜单?,php,laravel-5,Php,Laravel 5,型号: class Menu extends Model { protected $table = 'menus'; public function sub_menu(){ return $this->hasMany('App\Menu', 'parent_id'); } } class MenuController extends Controller { public function index() { $men

型号:

class Menu extends Model { protected $table = 'menus'; public function sub_menu(){ return $this->hasMany('App\Menu', 'parent_id'); } } class MenuController extends Controller { public function index() { $menus = Menu::where('parent_id', 0)->get(); return view('admin.menus.index',compact('menus')); } }
<ul>
    @foreach($menus as $menu)
    <li>{{ $menu->title }}
    @if($menu->sub_menu->count() > 0)
       <ul>
       @foreach($menu->sub_menu as $sub)
           <li{{ $sub->title }}</li>
       @endforeach
       </ul>
   @endif
   </li>
   @endforeach
</ul>
---------------------------------------------------------------------- id | title | parent_id ---------------------------------------------------------------------- 1 | Home | 0 ---------------------------------------------------------------------- 2 | Product1 | 0 ---------------------------------------------------------------------- 3 | Product1.1 | 2 ---------------------------------------------------------------------- 4 | Product1.1.1 | 3 ---------------------------------------------------------------------- 5 | Product1.1.2 | 3 ---------------------------------------------------------------------- 类菜单扩展了模型 { 受保护的$table='菜单'; 公共功能子菜单(){ 返回$this->hasMany('App\Menu','parent_id'); } } 控制器:

class Menu extends Model { protected $table = 'menus'; public function sub_menu(){ return $this->hasMany('App\Menu', 'parent_id'); } } class MenuController extends Controller { public function index() { $menus = Menu::where('parent_id', 0)->get(); return view('admin.menus.index',compact('menus')); } }
<ul>
    @foreach($menus as $menu)
    <li>{{ $menu->title }}
    @if($menu->sub_menu->count() > 0)
       <ul>
       @foreach($menu->sub_menu as $sub)
           <li{{ $sub->title }}</li>
       @endforeach
       </ul>
   @endif
   </li>
   @endforeach
</ul>
---------------------------------------------------------------------- id | title | parent_id ---------------------------------------------------------------------- 1 | Home | 0 ---------------------------------------------------------------------- 2 | Product1 | 0 ---------------------------------------------------------------------- 3 | Product1.1 | 2 ---------------------------------------------------------------------- 4 | Product1.1.1 | 3 ---------------------------------------------------------------------- 5 | Product1.1.2 | 3 ---------------------------------------------------------------------- 类MenuController扩展控制器 { 公共职能指数() { $menus=Menu::where('parent_id',0)->get(); 返回视图('admin.menus.index',压缩('menus'); } } 查看:

class Menu extends Model { protected $table = 'menus'; public function sub_menu(){ return $this->hasMany('App\Menu', 'parent_id'); } } class MenuController extends Controller { public function index() { $menus = Menu::where('parent_id', 0)->get(); return view('admin.menus.index',compact('menus')); } }
<ul>
    @foreach($menus as $menu)
    <li>{{ $menu->title }}
    @if($menu->sub_menu->count() > 0)
       <ul>
       @foreach($menu->sub_menu as $sub)
           <li{{ $sub->title }}</li>
       @endforeach
       </ul>
   @endif
   </li>
   @endforeach
</ul>
---------------------------------------------------------------------- id | title | parent_id ---------------------------------------------------------------------- 1 | Home | 0 ---------------------------------------------------------------------- 2 | Product1 | 0 ---------------------------------------------------------------------- 3 | Product1.1 | 2 ---------------------------------------------------------------------- 4 | Product1.1.1 | 3 ---------------------------------------------------------------------- 5 | Product1.1.2 | 3 ----------------------------------------------------------------------
    @foreach($menus作为$menu)
  • {{$menu->title} @如果($menu->sub_menu->count()>0)
      @foreach($menu->sub_菜单作为$sub) 标题} @endforeach
    @恩迪夫
  • @endforeach
表格结构:

class Menu extends Model { protected $table = 'menus'; public function sub_menu(){ return $this->hasMany('App\Menu', 'parent_id'); } } class MenuController extends Controller { public function index() { $menus = Menu::where('parent_id', 0)->get(); return view('admin.menus.index',compact('menus')); } }
<ul>
    @foreach($menus as $menu)
    <li>{{ $menu->title }}
    @if($menu->sub_menu->count() > 0)
       <ul>
       @foreach($menu->sub_menu as $sub)
           <li{{ $sub->title }}</li>
       @endforeach
       </ul>
   @endif
   </li>
   @endforeach
</ul>
---------------------------------------------------------------------- id | title | parent_id ---------------------------------------------------------------------- 1 | Home | 0 ---------------------------------------------------------------------- 2 | Product1 | 0 ---------------------------------------------------------------------- 3 | Product1.1 | 2 ---------------------------------------------------------------------- 4 | Product1.1.1 | 3 ---------------------------------------------------------------------- 5 | Product1.1.2 | 3 ---------------------------------------------------------------------- ---------------------------------------------------------------------- id |头衔|家长id ---------------------------------------------------------------------- 1 |家| 0 ---------------------------------------------------------------------- 2 |产品1 | 0 ---------------------------------------------------------------------- 3 |产品1.1 | 2 ---------------------------------------------------------------------- 4 |产品1.1.1 | 3 ---------------------------------------------------------------------- 5 |产品1.1.2 | 3 ----------------------------------------------------------------------
它只显示2个级别,但我需要多个级别,请帮助

您可以使用递归进行尝试,如下所示:

<ul>
    @foreach($menus as $menu)
        <li>
            {{ $menu->title }}
            @if($menu->sub_menu->count())
                {!! view('admin.menus.index', ['menus' => $menu->sub_menu]) !!}
            @endif
     </li>
    @endforeach
</ul>
    @foreach($menus作为$menu)
  • {{$menu->title} @如果($menu->sub_menu->count()) {!!查看('admin.menus.index',['menus'=>$menu->sub_menu]) @恩迪夫
  • @endforeach
当您的视图只有上述内容时,它将起作用。否则,您必须创建新的分部并递归调用它


请注意,使用递归可能会以无限循环结束。

这里有什么问题?@AmitGupta.op如果菜单是多级的,那么他需要在循环中显示菜单,但他使用foreach循环,它将以两步菜单结束。我希望他需要同时使用loop@AmitGupta,只显示两个级别,但我需要多个级别。请帮忙!我不明白你的意思。你能在你的问题中展示你拥有什么和你需要什么吗?@AmitGupta好的,我刚刚编辑了我的问题。谢谢你的评论。不,它不适用于多个级别,但适用于1个级别。非常感谢,但现在我已经通过在模型中创建递归函数解决了这个问题。谢谢你也可以检查这个。看来这对你有帮助。