如何使菜单和子菜单动态 Laravel

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/32095711/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-14 12:13:09  来源:igfitidea点击:

How to make menu and submenu dynamic Laravel

phpmysqllaravellaravel-5

提问by Ranjeet Karki

I want to make menu and submenu dynamic .I made menu with their link but unable to make submenu,please help me my database structure

我想让菜单和子菜单动态。我用他们的链接制作了菜单但无法制作子菜单,请帮助我我的数据库结构

table name:menu

表名:menu

id              menu_name       url                timestamps

table:sub_menu

桌子:sub_menu

id      submenu_name       link      menu_id  timestamps

my query is like this

我的查询是这样的

public function menu()
{   
   $sql=\DB::table('menu')->rightjoin('sub_menu','menu.id','=','sub_menu.menu_id')
   ->select('submenu_name','link','url','menu_id','menu_name','menu.id')->get();
    return view('products.show.menu',compact('sql'));
}

view

看法

<ul>    
    @foreach($sql as $key => $nav)
      @if($key > 0)
        <li>
            <a href="#">{{$nav->menu_name}}</a>
             @if (count($nav->submenu_name) > 0 )
                <ul>        
                 @foreach($nav->submenu_name as $child)
                    <li><a href="#">{{$child->submenu_name}}</a></li>
                @endforeach
                @endif
                </ul>
        </li>
      @endif
    @endforeach
    </ul>

回答by benJ

Have you set up models for these tables? Your query will return multiple rows for each menu/submenu combination, meaning you can't just iterate over it as you are. There's no need to use the query builder here.

您是否为这些表设置了模型?您的查询将为每个菜单/子菜单组合返回多行,这意味着您不能按原样迭代它。此处无需使用查询构建器。

Assuming your models are set up as follows (you will need to check the namespace used in the relationships):

假设您的模型设置如下(您需要检查关系中使用的命名空间):

class Menu extends Eloquent
{
    protected $table = 'menu';

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

class SubMenu extends Eloquent
{
    protected $table = 'sub_menu';

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

In your controller, you can do:

在您的控制器中,您可以执行以下操作:

public function menu()
{
    $menu = Menu::with('submenu')->get();

    return view('products.show.menu', compact('menu'));
}

Then in your view:

那么在你看来:

<ul>
    @foreach($menu as $menuItem)
        <li>
            {{ $menuItem->menu_name }}
            @if( ! $menuItem->submenu->isEmpty())
                <ul>
                    @foreach($menuItem->submenu as $subMenuItem)
                        <li>{{ $subMenuItem->submenu_name }}</li>
                    @endforeach
                </ul>
            @endif
        </li>
    @endforeach
</ul>

回答by Mahmoud Khalil

You can use it without controller

您可以在没有控制器的情况下使用它

`@foreach(App\Menu::get() as $menuItem)
  @if( ! $menuItem->submenu->isEmpty() )
    <li class="dropdown">
    <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">
        {{ $menuItem->menu_name }}
    </a>
  @else
    <li>
    <a href="{{ $menuItem->url }}">{{ $menuItem->menu_name }}</a>
  @endif

  @if( ! $menuItem->submenu->isEmpty())
      <ul class="dropdown-menu" role="menu">
          @foreach($menuItem->submenu as $subMenuItem)
              <li><a href="{{ $subMenuItem->link }}">{{ $subMenuItem->submenu_name }}</a></li>
          @endforeach
      </ul>
  @endif
  </li>
@endforeach`