多个实体管理者的Symfony原则迁移

jhdbpxl9  于 2023-03-03  发布在  其他
关注(0)|答案(3)|浏览(152)

我正在尝试制作SaaS应用程序,并为此目的通过official documentation创建了多个实体管理器和相应的连接,但运行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: 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 器。

sbdsn5lh

sbdsn5lh1#

到目前为止的答案是:docs是outdateddoctrine/doctrine-migrations-bundle v3.1可能会解决这个问题,但它依赖doctrine/migrations库来发布v3.1(如issue中所述),到目前为止,唯一的解决方案是使用命令 Package 器的this工作区,但它需要配置方面的调整(本文中的YamlFile需要doctrine样式的配置,而不是symfony的)

46qrfjad

46qrfjad2#

您必须为每个Connection编写一个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
cld4siwp

cld4siwp3#

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

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

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

execute-migrations.sh [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。
看起来工作正常。

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

相关问题