加--dry-run参数可预览迁移变更而不执行,输出含SQL语句列表、执行方向提示、错误校验及零写操作;安全执行需核对字段变更、索引操作、外键约束,并配合schema:validate、migrations:diff及测试库验证。

加 --dry-run 参数不是执行迁移,而是模拟执行过程,用来预览即将发生的数据库变更,不真正改动表结构或数据。
看输出内容的关键点
运行类似 php bin/console doctrine:migrations:execute --dry-run Version20231001120000 后,终端会显示:
-
SQL语句列表:每条 DDL(如
CREATE TABLE、ALTER COLUMN、DROP INDEX)都会原样打印出来,不含分号但可读性强; - 执行顺序提示:标明该版本迁移是“up”(正向升级)还是“down”(回滚),并说明是否依赖其他版本;
- 无错误即通过:如果语法或引用关系有问题(比如字段名不存在、外键指向错误表),命令会提前报错并终止,不会继续输出 SQL;
- 不触发任何数据库写操作:不会新建表、不会修改字段类型、也不会插入/删除任何记录。
如何判断是否安全执行
重点核对三类内容:
-
字段变更是否符合预期:比如把
VARCHAR(255)改成TEXT,或新增非空字段时是否有默认值; -
索引操作是否合理:尤其是
DROP INDEX是否误删了高频查询用的索引; -
外键约束是否完整:检查
ADD CONSTRAINT中的表名、字段名拼写,以及级联行为(ON DELETE CASCADE等)是否与业务逻辑一致。
配合其他命令交叉验证
单看 --dry-run 输出还不够,建议组合使用:
- 先跑
php bin/console doctrine:schema:validate,确认当前实体映射与数据库实际结构一致; - 再用
php bin/console doctrine:migrations:diff生成新迁移前,确认差异是否只包含你预期的改动; - 若涉及生产环境,把
--dry-run输出的 SQL 复制到测试库中手动EXPLAIN或执行,观察执行计划和耗时。
它不复杂但容易忽略细节,尤其在字段类型变更或索引调整时,多看一眼 SQL 才能避开线上事故。


















