migrate:rollback 默认回退最新一批迁移(batch 值最大者),即撤销最近一次 php artisan migrate 所执行的全部迁移;支持 --step 回退多批或 --batch 精确指定批次,操作前建议备份并用 --pretend 预览。

在 Laravel 10 中,migrate:rollback 命令默认只撤销**最后一次迁移批次(batch)**,也就是最近一次执行 php artisan migrate 时写入 migrations 表中的所有迁移文件。这不是“撤销单个迁移文件”,而是撤销整个批次。
确认当前迁移批次状态
先查看数据库的 migrations 表,确认哪些迁移属于同一批次(batch 字段值相同)。Laravel 每次运行 migrate 都会为该次执行的所有迁移分配一个递增的 batch 编号(如 1、2、3…)。rollback 默认回退的是 batch 值最大的那组。
执行基础回滚操作
在项目根目录运行:
php artisan migrate:rollback该命令会:
- 查找
migrations表中batch值最大的记录 - 按
id降序读取这批记录对应的迁移文件 - 依次调用每个迁移类的
down()方法 - 从
migrations表中删除这组记录
回滚指定次数或特定批次
如果想回退多批(比如最后两次 migrate 的操作),用 --step 参数:
也可以直接指定 batch 编号(需已知目标 batch 值):
php artisan migrate:rollback --batch=3注意:--batch 是精确匹配,不是“回退到 batch=3”,而是只回退 batch=3 这一批(即使它不是最新批次)。
安全提示与常见问题
回滚操作不可逆,建议操作前备份数据库。另外:
- 确保
down()方法逻辑正确,尤其是涉及数据删除或字段重命名的操作 - 若某次迁移失败导致部分文件已执行、部分未执行,该批次可能不完整,
rollback仍会尝试回退已记录的那些 - 使用
--pretend可预览将执行的 SQL(不真正执行):
php artisan migrate:rollback --pretend











