Reputation: 2647
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
id menu_name url timestamps
table: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>
Upvotes: 0
Views: 12953
Reputation: 344
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`
Upvotes: 0
Reputation: 2580
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>
Upvotes: 2