laravel 5中的菜单多个级别?

时间:2016-10-29 16:12:37

标签: 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()
    {
        $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
----------------------------------------------------------------------

它仅显示2个级别,但我需要多个级别,请帮忙!

1 个答案:

答案 0 :(得分: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>

当你的视图只有上述内容时,它会起作用,你创建了新的部分并递归调用它。

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