在laravel中从数据库创建,排序菜单和子菜单

时间:2017-02-02 19:49:51

标签: php laravel

我正在尝试构建从数据库中提取的菜单部分,我也是menussub menus。我已经提到名为column的{​​{1}},如果parent_id表示它是NULL元素,如果存在任何parent则为id特别是submenu。以下是我的表

id of menu element

和菜单的格式如下:

/***************** 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  |

菜单也根据sort_id

排序

直到现在我能够对菜单元素进行排序,但我希望排序为parent_id特定。

<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>

我对如何实现这一点感到困惑。帮助我。

由于

1 个答案:

答案 0 :(得分:0)

您只需添加其他orderBy()

即可
$menu_elements = MenuElements::orderBy('parent_id', 'asc')->orderBy('sort_id', 'asc')->get()->all();

<强>更新

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

$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>