更改 Symfony 中 Migration 类中的数据库连接

Iva*_*vić 3 doctrine symfony symfony4

在迁移类中,根据逻辑,我需要使用不同类型的数据库连接。如何在迁移类中通过连接名称获取新连接?

目前在doctrine.yaml文件中我有连接名称“default”、“user”、“admin”和“cron”。

我的迁移类:

final class Version20190711123152 extends AbstractMigration
{
     public function up(Schema $schema) : void
     { 
        ...

        if($someCondition) {
            $this->setConnection($wantedConnection) // how to set $wantedConnection for example on "admin" connection
        }
     }

    /**
     * @param Connection $connection
     */
    public function setConnection(Connection $connection): void
    {
        $this->connection = $connection;
    }
Run Code Online (Sandbox Code Playgroud)

我正在使用 Symfony 4.3

Mak*_*akG 5

我不知道你的确切用例,但我认为迁移不应该是有条件的,即你最终可能会在不同环境中得到不一致的数据库。

也许考虑将迁移文件存储在单独的目录中,并在运行迁移时使用不同的配置和实体管理器。

# /config/migrations/default.yaml
name: "Default Migrations"
migrations_namespace: "App\Migrations\Default"
table_name: "doctrine_migration_versions"
migrations_directory: "src/Migrations/Default"
Run Code Online (Sandbox Code Playgroud)
# /config/migrations/admin.yaml
name: "Admin Migrations"
migrations_namespace: "App\Migrations\Admin"
table_name: "doctrine_migration_versions"
migrations_directory: "src/Migrations/Admin"
Run Code Online (Sandbox Code Playgroud)

假设您配置了两个实体管理器 - 一个是默认的,另一个是“admin”名称,您可以单独运行这些迁移:

php bin/console doctrine:migrations:migrate --configuration=config/migrations/default.yaml
php bin/console doctrine:migrations:migrate --configuration=config/migrations/admin.yaml --em=admin
Run Code Online (Sandbox Code Playgroud)