MenuService.php 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  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 $dist_id = 0): array
  12. {
  13. // 一次性加载所有菜单项
  14. $menus = SiteMenu::where('show', 1) // 只显示状态为 1 的菜单
  15. ->where('dist_id', $dist_id)
  16. ->orderBy('order', 'asc')
  17. ->get();
  18. // 构造多级菜单
  19. return $this->buildMenuTree($menus);
  20. }
  21. /**
  22. * 递归构造菜单树
  23. *
  24. * @param \Illuminate\Database\Eloquent\Collection $menus
  25. * @param int $parentId
  26. * @return array
  27. */
  28. private function buildMenuTree($menus, $parentId = 0): array
  29. {
  30. $menuTree = [];
  31. foreach ($menus as $menu) {
  32. if ($menu->parent_id == $parentId) {
  33. $menu->children = $this->buildMenuTree($menus, $menu->id);
  34. $menuTree[] = $menu->toArray();
  35. }
  36. }
  37. return $menuTree;
  38. }
  39. }