Doctrine迁移报错:配置键'name'不存在,多数据库迁移如何解决?
解决Doctrine Migrations多数据库迁移配置报错:
Migrations configuration key "name" does not exist 问题原因
Doctrine Migrations 3.x 版本(对应你使用的doctrine/doctrine-migrations-bundle 3.1.1)移除了配置文件中的顶级name键,你的配置文件仍保留这个过时配置项,导致执行迁移命令时触发错误。
修复步骤
1. 修正自定义配置文件
删除doctrine_migrations_mysql.yaml中的name行,修正后的配置如下:
migrations_namespace: MigrationsMysql table_name: migration_versions migrations_directory: 'MigrationsMysql'
2. (可选)在Symfony Bundle配置中统一管理多数据库迁移
更推荐的方式是直接在Symfony的config/packages/doctrine_migrations.yaml中配置多EntityManager的迁移规则,无需单独的自定义配置文件:
doctrine_migrations: migrations_paths: # 映射迁移命名空间到对应的目录 'MigrationsMysql': '%kernel.project_dir%/MigrationsMysql' 'MigrationsPostgres': '%kernel.project_dir%/MigrationsPostgres' # 为每个EntityManager配置独立的迁移参数 managers: mysql: em: manager_mysql name: 'Doctrine Mysql Migrations' table_name: migration_versions postgres: em: manager_postgres name: 'Doctrine Postgres Migrations' table_name: migration_versions
3. 执行迁移的正确命令
- 如果使用修正后的自定义配置文件,命令保持不变:
php bin/console doctrine:migrations:migrate --em=manager_mysql --configuration=./config/migration_conf/doctrine_migrations_mysql.yaml - 如果使用统一Bundle配置,命令可简化为:
# MySQL迁移 php bin/console doctrine:migrations:migrate --manager=mysql # PostgreSQL迁移 php bin/console doctrine:migrations:migrate --manager=postgres
额外说明
你的旧配置之前能正常工作,大概率是因为当时使用的是Doctrine Migrations 2.x版本,该版本允许顶级name键;升级到3.x版本后配置结构发生变化,导致旧配置不再兼容。
内容的提问来源于stack exchange,提问作者shuba.ivan
相关产品推荐
相关产品推荐

