如何使菜单和子菜单动态 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
How to make menu and submenu dynamic Laravel
提问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`