MenuService.php 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. <?php
  2. namespace App\Services;
  3. use App\Models\SiteMenu;
  4. class MenuService
  5. {
  6. /**
  7. * 获取多级菜单
  8. *
  9. * @return array
  10. */
  11. public function getMultiLevelMenu(int $menu_location=0,int $dist_id = 0): array
  12. {
  13. // 一次性加载所有菜单项
  14. $menus = SiteMenu::where('show', 1) // 只显示状态为 1 的菜单
  15. ->where('dist_id', $dist_id)
  16. ->where('menu_location', $menu_location)
  17. ->orderBy('order', 'asc')
  18. ->get();
  19. // 构造多级菜单
  20. return $this->buildMenuTree($menus);
  21. }
  22. /**
  23. * 递归构造菜单树
  24. *
  25. * @param \Illuminate\Database\Eloquent\Collection $menus
  26. * @param int $parentId
  27. * @return array
  28. */
  29. private function buildMenuTree($menus, $parentId = 0): array
  30. {
  31. $menuTree = [];
  32. foreach ($menus as $menu) {
  33. if ($menu->parent_id == $parentId) {
  34. $menu->children = $this->buildMenuTree($menus, $menu->id);
  35. $menuTree[] = $menu->toArray();
  36. }
  37. }
  38. return $menuTree;
  39. }
  40. }