<?php namespace App\Services; use App\Models\SiteMenu; class MenuService { /** * 获取多级菜单 * * @return array */ public function getMultiLevelMenu(int $menu_location=0,int $dist_id = 0): array { // 一次性加载所有菜单项 $menus = SiteMenu::where('show', 1) // 只显示状态为 1 的菜单 ->where('dist_id', $dist_id) ->where('menu_location', $menu_location) ->orderBy('order', 'asc') ->get(); // 构造多级菜单 return $this->buildMenuTree($menus); } /** * 递归构造菜单树 * * @param \Illuminate\Database\Eloquent\Collection $menus * @param int $parentId * @return array */ private function buildMenuTree($menus, $parentId = 0): array { $menuTree = []; foreach ($menus as $menu) { if ($menu->parent_id == $parentId) { $menu->children = $this->buildMenuTree($menus, $menu->id); $menuTree[] = $menu->toArray(); } } return $menuTree; } }