重置 laravel-admin 菜单排序需更新 admin_menu 表的 sort 字段:先对 parent_id=0 的一级菜单按 id 升序设为 1,2,3…,再对 parent_id>0 的二级菜单按 parent_id 和 id 分组排序并独立编号;推荐分步操作——先清空 sort 值,再执行 php artisan admin:publish --force 重建菜单。

要重置 Laravel-admin 的菜单排序,本质是将数据库中 admin_menu 表的 sort 字段按菜单层级和逻辑顺序重新赋值(通常从 1 开始递增)。Laravel-admin 默认使用该字段控制后台左侧菜单的显示顺序。
直接执行 SQL 重置排序(适用于 MySQL)
以下 SQL 语句会将所有一级菜单(parent_id = 0)按 id 升序排列,并依次设为 sort = 1, 2, 3...;二级菜单(parent_id > 0)则按所属父级分组、再按 id 排序后独立编号。这是最贴近 Laravel-admin 默认行为的安全重排方式:
SET @row_number := 0;
UPDATE admin_menu
SET sort = (
SELECT new_sort FROM (
SELECT id, @row_number := @row_number + 1 AS new_sort
FROM admin_menu
WHERE parent_id = 0
ORDER BY id
) AS t1
WHERE t1.id = admin_menu.id
)
WHERE parent_id = 0;
SET @row_number := 0;
UPDATE admin_menu
SET sort = (
SELECT new_sort FROM (
SELECT id, @row_number := @row_number + 1 AS new_sort
FROM admin_menu
WHERE parent_id > 0
ORDER BY parent_id, id
) AS t2
WHERE t2.id = admin_menu.id
)
WHERE parent_id > 0;
更稳妥的分步重置方案(推荐)
如果担心一条 SQL 执行出错或环境不支持变量嵌套,可分两步手动操作:
- 先清空所有菜单的 sort 值:
UPDATE admin_menu SET sort = 0; - 再用 PHP artisan 命令重建默认菜单(需确保已配置好
app/Admin/routes.php和菜单注册逻辑):php artisan admin:publish --force(部分版本需配合--menu参数) - 若未启用自动发布机制,可临时在
app/Admin/bootstrap.php中调用Menu::reset();并刷新页面触发重建
注意事项
执行前务必做好数据备份,尤其是生产环境:
- 确认表名正确(默认为
admin_menu,如自定义过需替换) - 检查是否有自定义排序逻辑(例如某些菜单通过
sort实现隐藏/置顶,重置后需手动调整) - 执行后清除 Laravel 缓存:
php artisan cache:clear && php artisan config:clear - 浏览器端也建议硬刷新(Ctrl+F5),避免前端缓存旧菜单结构
不复杂但容易忽略细节。











