Symfony 5.1.5配置多实体管理器后,如何为Client生成迁移文件?
解决Symfony多实体管理器下生成Client迁移文件的问题
看起来你已经正确配置了多实体管理器,但在生成迁移时遇到了命令参数和配置的问题。以下是一步步的解决方案:
1. 修正Doctrine Migrations配置
首先需要为每个实体管理器单独配置迁移路径,这样Doctrine才能区分不同EM的迁移文件。修改你的doctrine_migrations.yaml:
doctrine_migrations: # 默认使用master实体管理器 em: 'master' # 为每个实体管理器定义独立的迁移命名空间和存储路径 entity_managers: master: migrations_paths: 'DoctrineMigrations\Master': '%kernel.project_dir%/migrations/Master' client: migrations_paths: 'DoctrineMigrations\Client': '%kernel.project_dir%/migrations/Client'
这样配置后,master和client的迁移文件会分别存放在migrations/Master和migrations/Client目录,避免混淆。
2. 使用正确的命令生成Client迁移
你有两种可靠的方式生成Client实体管理器的迁移:
方式一:使用Symfony MakerBundle命令(推荐)
MakerBundle的make:migration命令支持--em参数来指定实体管理器,直接执行:
symfony console make:migration --em=client
这个命令会自动对比App\Entity\Client下的实体和Client数据库的schema,生成对应的迁移文件到migrations/Client目录。
方式二:使用Doctrine Migrations原生命令
如果你偏好使用Doctrine的原生迁移命令,确保执行时指定正确的实体管理器:
php bin/console doctrine:migrations:diff --em=client
如果遇到"The "--em" option does not exist"错误,大概率是你的Doctrine MigrationsBundle版本过低,建议更新到适配Symfony 5.1的版本(比如^3.0),更新后该参数就会生效。
3. 执行Client迁移
生成迁移文件后,执行迁移时同样需要指定--em参数:
php bin/console doctrine:migrations:migrate --em=client
额外注意事项
- 确保你的
client数据库连接已经正确配置:目前你的client连接url是'~',需要在环境变量中设置CLIENT_DATABASE_URL并正确解析,否则Doctrine无法连接数据库生成迁移。 - 迁移文件生成后,建议检查内容是否符合预期,再执行迁移操作。
内容的提问来源于stack exchange,提问作者J. Doe
相关产品推荐
相关产品推荐

