Php 从laravel中的数据库创建、排序菜单和子菜单

Php 从laravel中的数据库创建、排序菜单和子菜单,php,laravel,Php,Laravel,我正在尝试构建从数据库获取的菜单部分,我还有菜单和子菜单。我提到了一个名为parent\u id的列,如果NULL表示它是parent元素,如果存在任何id,则它是该菜单元素的id的子菜单。下面是我的桌子 /***************** Menu Elements Table ****************/ |id | name | link | parent_id | sort_id | _____________________________________

我正在尝试构建从数据库获取的菜单部分,我还有
菜单
子菜单
。我提到了一个名为
parent\u id
列,如果
NULL
表示它是
parent
元素,如果存在任何
id
,则它是该菜单元素的
id的
子菜单
。下面是我的桌子

/***************** Menu Elements Table ****************/
|id |   name     |   link    | parent_id | sort_id |
____________________________________________________
|1  | Home       | home      |    NULL   |   NULL  |
|2  | About Us   | about-us  |    NULL   |   NULL  |
|3  | Services   | services  |     2     |     2   |
|4  | Vision     | vision    |     2     |     1   |
|5  | Contact us | contact-us|    NULL   |   NULL  |
菜单的格式如下:

<ul id="main-nav">
    <li class="menu-item"><a href="index">Home</a></li>
    <li class="menu-item"><a href="about-us">About Us</a>
        <ul class="sub-nav">
            <li><a href="vision">Vision</a></li>
            <li><a href="services">Services</a></li>
    </li>
    <li class="menu-item"><a href="contact-us">Contact us</a></li>
</ul>
我有点困惑如何做到这一点。帮帮我


谢谢

您只需添加另一个
orderBy()

更新

要在视图中执行此操作,我只需将您的查询更改为:

$menu_elements = MenuElements::all();
那么在你看来,

<ul id="main-nav">
    @foreach($menu_elements->where('parent_id', null) as $parent_item)
        <li class="menu-item">
            <a href="{{ $parent_item->link }}">{{ $parent_item->name }}</a>
            @php
                $children = $menu_elements->where('parent_id', $parent_item->id);
            @endphp
            @if(!$children->isEmpty())
                <ul class="sub-nav">
                    @foreach($children->sortBy('sort_id') as $child)
                        <li><a href="{{ $child->link }}">{{ $child->name }}</a></li>
                    @endforeach
                </ul>
            @endif
        </li>
    @endforeach
</ul>
    @foreach($menu\u elements->where('parent\u id',null)作为$parent\u项)
  • @php $children=$menu\u elements->where('parent\u id',$parent\u item->id); @endphp @如果(!$children->isEmpty())
      @foreach($children->sortBy('sort_id')作为$child)
    • @endforeach
    @恩迪夫
  • @endforeach

如何在
HTML
中实现它,因为在放置
sub-nav
标记时这将很困难。您使用的是什么版本的Laravel?Laravel版本5.3
$menu_elements = MenuElements::all();
<ul id="main-nav">
    @foreach($menu_elements->where('parent_id', null) as $parent_item)
        <li class="menu-item">
            <a href="{{ $parent_item->link }}">{{ $parent_item->name }}</a>
            @php
                $children = $menu_elements->where('parent_id', $parent_item->id);
            @endphp
            @if(!$children->isEmpty())
                <ul class="sub-nav">
                    @foreach($children->sortBy('sort_id') as $child)
                        <li><a href="{{ $child->link }}">{{ $child->name }}</a></li>
                    @endforeach
                </ul>
            @endif
        </li>
    @endforeach
</ul>