我正在尝试制作SaaS应用程序,并为此目的通过official documentation创建了多个实体管理器和相应的连接,但运行php bin/console doctrine:migrations:diff --em=customer
命令会导致The "--em" option does not exist.
异常。我知道我可以更改名为em
的doctrine_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: App\Service\Config\Database\Connection
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: 'App\Entity\Shared'
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: 'App\Entity\Tenant'
alias: Tenant
App\Service\Config\Database\Connection
类只是一个可以动态更改连接参数的 Package 器。
3条答案
按热度按时间sbdsn5lh1#
到目前为止的答案是:docs是outdated,
doctrine/doctrine-migrations-bundle
v3.1可能会解决这个问题,但它依赖doctrine/migrations
库来发布v3.1(如issue中所述),到目前为止,唯一的解决方案是使用命令 Package 器的this工作区,但它需要配置方面的调整(本文中的YamlFile
需要doctrine样式的配置,而不是symfony的)46qrfjad2#
您必须为每个Connection编写一个config.yml,然后可以使用
php bin/console doctrine:migration:diff --configuration=<path-to-config>/config.yml
迁移数据库。cld4siwp3#
我用两个简单的shell脚本解决了不同EntityManager(每个EntityManager都有单独的DB连接)的迁移问题。
将实体管理器的名称作为参数。运行doctrine:migrations:diff--em = name-of-entity-manager后,它将所有生成的迁移移动到子文件夹:迁移/实体管理者名称
将实体管理器的名称作为参数。
在运行doctrine:migration:migrate之前,它会将所有迁移从子文件夹migrations/name-of-entity-manager移动到configured/default migrations文件夹(迁移)
当它完成迁移时(doctrine:migration:migrate--em = name-of-entity-manager),它会将所有迁移移回源文件夹migrations/name-of-entity-manager。
看起来工作正常。