Изменить подключение к базе данных в классе миграции в Symfony - PullRequest
0 голосов
/ 23 октября 2019

В классе миграции, в зависимости от логики, мне нужно использовать разные типы соединений с базой данных. Как в классе миграции получить новое соединение по имени соединения ?

В настоящее время в файле 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

1 Ответ

2 голосов
/ 24 октября 2019

Я не знаю вашего точного варианта использования, но я не думаю, что миграции должны быть условными, то есть вы можете столкнуться с несовместимыми базами данных в разных средах.

Возможно, стоит рассмотреть возможность хранения файлов миграции в отдельныхкаталоги и использовать другую конфигурацию и менеджер сущностей при выполнении миграций.

# /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
...