symfony - 在 Symfony 的迁移类中更改数据库连接

标签 symfony doctrine 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;
    }

我正在使用 Symfony 4.3

最佳答案

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

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

# /config/migrations/default.yaml
name: "Default Migrations"
migrations_namespace: "App\Migrations\Default"
table_name: "doctrine_migration_versions"
migrations_directory: "src/Migrations/Default"
# /config/migrations/admin.yaml
name: "Admin Migrations"
migrations_namespace: "App\Migrations\Admin"
table_name: "doctrine_migration_versions"
migrations_directory: "src/Migrations/Admin"

假设您已经配置了两个实体管理器 - 一个是默认管理器,一个是“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

关于symfony - 在 Symfony 的迁移类中更改数据库连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58519581/

相关文章:

PHP:获取所有类的连接和记录器对象的最佳方法

php - Doctrine : Class Table Inheritance : Add an existing object from parent table to extended table

string - Symfony4 预期字符串但得到字符串

php - symfony 4 php模板位置

symfony - 如何在 Symfony2 项目的 prod 环境中启用调试工具栏?

javascript - 转换 Symfony2 PHP 实体对象以在 Javascript 中使用

php - 重写具有多个参数的复杂类

symfony - Doctrine Timestampable 扩展不持久

php - Doctrine 集合 : difference between toArray() and getData()

symfony - 容器扩展 "framework"未注册