symfony学说与多个实体管理器的迁移



我正在尝试制作SaaS应用程序,并为此目的通过遵循官方文档创建了多个实体管理器和相应的连接,但运行php bin/console doctrine:migrations:diff --em=customer命令会导致The "--em" option does not exist.异常。我知道我可以更改名为emdoctrine_migrations.yaml参数,但考虑到实体管理器的数量可能会增加,这不是一个解决方案。有什么变通办法吗?

doctrine.yml:

doctrine:
dbal:
default_connection: default
connections:
default:
url: '%env(resolve:DATABASE_URL)%'
driver: 'pdo_mysql'
server_version: '5.7'
charset: utf8mb4
tenant:
url: '%env(resolve:TENANT_DATABASE_URL)%'
driver: 'pdo_mysql'
server_version: '5.7'
charset: utf8mb4
wrapper_class: AppServiceConfigDatabaseConnection
orm:
auto_generate_proxy_classes: true
default_entity_manager: default
entity_managers:
default:
auto_mapping: false
naming_strategy: doctrine.orm.naming_strategy.underscore_number_aware
mappings:
Shared:
mapping: true
is_bundle: false
type: annotation
dir: '%kernel.project_dir%/src/Entity/Shared'
prefix: 'AppEntityShared'
alias: Shared
tenant:
connection: tenant
auto_mapping: false
naming_strategy: doctrine.orm.naming_strategy.underscore_number_aware
mappings:
Tenant:
mapping: true
is_bundle: false
type: annotation
dir: '%kernel.project_dir%/src/Entity/Tenant'
prefix: 'AppEntityTenant'
alias: Tenant

AppServiceConfigDatabaseConnection类只是一个可以动态更改连接参数的包装器。

到目前为止,答案是:文档已经过时,doctrine/doctrine-migrations-bundlev3.1可能会解决它,但它依赖于doctrine/migrations库来发布v3.1(如本期所述(,到目前为止唯一的解决方案是使用命令包装器的这种变通方法,但它需要对配置进行调整(文章中的YamlFile需要条令风格的配置,而不是symfony的(

您必须为每个连接编写一个config.yml,然后才能使用php bin/console doctrine:migration:diff --configuration=<path-to-config>/config.yml迁移数据库。

doctrine_migrations:
migrations_paths:
'DoctrineMigrations': 'src/MigrationsDefault'
connection: default
doctrine_migrations:
migrations_paths:
'DoctrineMigrations': 'src/MigrationsTenant'
connection: tenant

我正在用两个简单的shell脚本解决不同EntityManager(每个EntityManager都有一个单独的DB连接(的迁移问题。

generate-migrations.sh [name-of-entity-manager]

将实体管理器的名称作为参数。在运行原则:migrations:diff--em=实体管理器的名称后,它将所有生成的迁移移动到子文件夹:migrations/entity manager 的名称

execute-migrations.sh [name-of-entity-manager]

将实体管理器的名称作为参数。

在运行原则:迁移:迁移之前,它将所有迁移从实体管理器的子文件夹迁移/名称移动到配置/默认迁移文件夹(迁移(

当完成迁移(原则:migration:migrate--em=实体管理器的名称(时,它会将所有迁移移回sourcefolder migrations/name of entity manager。

看起来效果不错。

在条令迁移捆绑包3.2版中恢复了-em参数。

相关内容

  • 没有找到相关文章

最新更新