升级Doctrine Migrations 3后--allow-empty-diff参数失效求助
问题描述
部署脚本通过以下命令执行数据库迁移:
php bin/console doctrine:migrations:diff --allow-empty-diff --env=prod php bin/console doctrine:migrations:migrate --no-interaction --allow-no-migration --env=prod
升级Doctrine Migrations 3后,执行时抛出错误:
[ERROR] No changes detected in your mapping information.
此前使用旧版本时无此问题,相关依赖版本如下:
"doctrine/doctrine-bundle": "2.1.*", "doctrine/doctrine-migrations-bundle": "3.1.*", // 之前版本为"2.2.*" "doctrine/migrations": "3.2.*", // 之前版本为"2.2.*"
已确认--allow-empty-diff参数未被移除,执行php bin/console doctrine:migrations:diff --help可看到参数说明:
--allow-empty-diff Do not throw an exception when no changes are detected.
解决思路
- 单独测试diff命令:拆分部署脚本,先单独执行
php bin/console doctrine:migrations:diff --allow-empty-diff --env=prod,排查是否是后续migrate命令的干扰导致参数未生效。 - 清除生产环境缓存:Migrations 3对元数据缓存逻辑有调整,执行
php bin/console cache:clear --env=prod清除缓存后重新尝试生成diff,避免旧缓存引发的映射无变化误判。 - 核对Migrations配置:检查
config/packages/doctrine_migrations.yaml中的配置,重点确认storage、migrations_paths等项是否正确,新版本对配置的规范性要求更高,错误配置可能导致参数失效。 - 调整参数组合:尝试在diff命令中添加
--no-interaction参数,与--allow-empty-diff配合使用,验证是否能抑制错误抛出,新版本可能需要参数组合触发预期行为。 - 前置状态检查:在部署脚本中先执行
php bin/console doctrine:migrations:status --env=prod查看迁移状态,确认有映射变更时再执行diff命令,避免无变更时触发错误。 - 调整依赖版本:若上述方法无效,可尝试将
doctrine/doctrine-migrations-bundle和doctrine/migrations降级到3.x的稳定小版本(如3.0.*),同时确保与doctrine/doctrine-bundle版本兼容,验证是否为特定版本的bug导致。
内容的提问来源于stack exchange,提问作者Ignas Damunskis
相关产品推荐
相关产品推荐

