8
votes

Migration de plusieurs bases de données à l'aide de doctrine2 avec Symfony2

J'ai 2 bases de données DB1 et DB2 dans Symfony2 + Doctrine2 et les deux bases de données sont différentes les unes des autres en termes de tables et de leurs champs.

Je dois travailler sur la migration. Les choses fonctionnent bien tant qu'il y a une base de données.

mais cela ne fonctionne pas quand il y a plus d'une base de données.

Aussi, est-ce que je peux fournir des paramètres de migration spécifiques de gestionnaire d'entité.

ou y a-t-il un moyen par lequel je peux fournir une connexion ou un gestionnaire d'entité dans la classe de migration.


0 commentaires

3 Réponses :


16
votes

Vous pouvez fournir une option d'entitémanager à l'aide de la tâche de migration. J'ajoute également ce morceau de code, pour éviter d'exécuter la migration sur une autre dB par erreur:

    $parameters = $this->connection->getParams();
    $this->skipIf(
        $parameters['dbname'] != "my_db_name"
        'This is the other DB\'s migration, pass a correct --em parameter'
    );


1 commentaires

Le seul problème que j'ai trouvé avec cette approche est que si vous utilisez différents noms de DB sur le développement, le test, la mise en scène et la production, vous devez ajouter plusieurs conditions. Il serait plus facile si nous pouvions avoir accès au paramètre EntityManager.



0
votes

Le problème similaire et la solution: Symfony2 - Modifier le répertoire de migration

Vous pouvez créer un autre dossier de migration pour Second DB et mettre des migrations à l'intérieur.


0 commentaires

8
votes

Cette question est un peu ancienne, mais elle est venue d'abord quand je posais la même chose. J'ai trouvé ma réponse dans le Configuration des migrations de doctrine Docs . Disons que vous ayez des connexions pour deux bases de données, chacune avec leurs propres gestionnaires d'entités (mappées ici avec XML, pas des annotations et non automatiquement mappées afin que les configurations de schéma puissent vivre dans le même trajet config / doctrine code> chemin): xxx pré>

alors vous ne pas em> Inclure les configurations doctrine_migrations code> dans config.yml code>. Au lieu de cela, créez un fichier de configuration pour chacun: p> xxx pré>

puis, chaque fois que vous exécutez une commande de migration, spécifiez à la fois le gestionnaire d'entité et la configuration: P>

#!/bin/bash
ENVIRONMENT="$1"

# Run migrations for a configuration
function runMigrations()
{
    local CONFIG="$1"
    local MANAGER="$2"
    local STATUS="$(bin/console doctrine:migrations:status --env=${ENVIRONMENT} --configuration=${CONFIG} --em=${MANAGER})"

    case "${STATUS}" in
        *"Already at latest version"*)
            # Do nothing
            ;;
        *)
            runNextMigration $CONFIG $MANAGER
            ;;
    esac
}

# Run the next migration for a configuration
function runNextMigration()
{
    local CONFIG="$1"
    local MANAGER="$2"
    bin/console doctrine:migrations:migrate next --env=$ENVIRONMENT --configuration=$CONFIG --em=$MANAGER

    runMigrations $CONFIG $MANAGER
}

runMigrations "src/MyBundle/Resources/config/migrations/base.yml" "default"
runMigrations "src/MyBundle/Resources/config/migrations/special.yml" "special"


0 commentaires