addClass('nav nav-pills nav-sidebar flex-column nav-flat') ->setWrapperTag('ul') ->setAttributes([ 'data-widget' => 'treeview', 'role' => 'menu', 'data-accordion' => 'false' ]) ->html(''); $user = Auth::guard('admin')->user(); $role = $user->roles->first(); $currentRoleId = $role ? $role->id : null; if ($currentRoleId) { // Single query to get all authorized menus $allMenus = DB::table('menus') ->join('role_menu', 'menus.id', '=', 'role_menu.menu_id') ->where('role_menu.role_id', $currentRoleId) ->select('menus.*') ->orderBy('order', 'ASC') ->get(); // Organize menus into parents and children $parents = $allMenus->where('parent_id', null); $childrenByParent = $allMenus->whereNotNull('parent_id') ->groupBy('parent_id'); foreach ($parents as $parent) { $this->addMenuItems($menu, $parent, $childrenByParent->get($parent->id)); } } view()->share('menu', $menu->render()); return $next($request); } protected function addMenuItems($menu, $item, $children) { if ($children && $children->isNotEmpty()) { $submenu = Menu::new()->addClass('nav nav-treeview'); foreach ($children as $child) { $submenu->html($this->createMenuItem($child)); } $menu->html( '' ); } else { $menu->html($this->createMenuItem($item)); } } protected function createMenuItem($item) { return ''; } }