2015-08-19 56 views
0

我想使菜单和子菜单的动态。我做的菜单与他们的链接,但无法使子菜单,请帮助我,我的数据库结构如何使菜单和子菜单动态Laravel

表名:menu

id    menu_name  url    timestamps 

表:sub_menu

id  submenu_name  link  menu_id timestamps 

我的查询是这样的

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')); 
} 

视图

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

回答

1

您是否设置了型号为这些表?您的查询将为每个菜单/子菜单组合返回多行,这意味着您不能像原样一样遍历它。这里不需要使用查询生成器。

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

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'); 
    } 
} 

在你的控制器,你可以这样做:

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

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

然后在您的看法:

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

许多thnaks但$ menu = Menu :: all() - > load('submenu')正常工作比$ menu = Menu :: with('submenu') - > all(); –

+0

是的,我可能更好地使用' - > get()' - 修正:) – benJ

+0

benJ如何使用一个菜单表与parent_id列使用一个模型做到这一点? –

0

您可以使用它,而控制器

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