Esta pregunta es un poco vieja, pero surgió primero cuando preguntaba lo mismo. Encontré mi respuesta en el Doctrine migrations configuration docs. Digamos que usted tiene conexiones para dos bases de datos, cada uno con sus propios gestores de entidad (mapeados aquí con XML, no anotaciones, y no de auto asignan por lo que las configuraciones de esquema pueden vivir en el mismo camino config/doctrine
):
# config.yml
doctrine:
dbal:
default_connection: default
connections:
default:
driver: '%database_driver%'
...
special:
driver: '%special_database_driver%'
orm:
entity_managers:
default:
auto_mapping: false
mappings:
base:
type: xml
dir: '%kernel.root_dir%/../src/MyBundle/Resources/config/doctrine/base'
prefix: MyBundle\Entity
alias: Base
is_bundle: false
special:
auto_mapping: false
connection: special
mappings:
special:
type: xml
dir: '%kernel.root_dir%/../src/MyBundle/Resources/config/doctrine/special'
prefix: MyBundle\Special
alias: Special
is_bundle: false
A continuación, no incluyen las configuraciones doctrine_migrations
en config.yml
. En su lugar, crear un archivo de configuración para cada uno:
# src/MyBundle/Resources/config/migrations/base.yml
name: BaseMigrations
migrations_namespace: MyBundle\Migrations\Base
table_name: Migrations
migrations_directory: src/MyBundle/Migrations/Base
# src/MyBundle/Resources/config/migrations/special.yml
name: SpecialMigrations
migrations_namespace: MyBundle\Migrations\Special
table_name: Migrations
migrations_directory: src/MyBundle/Migrations/Special
Entonces, cada vez que ejecute cualquier comando de migración, especifique tanto el gestor de la entidad y la configuración:
bin/console doctrine:migrations:status --env=dev --em=special --configuration=src/MyBundle/Resources/config/migrations/special.yml
Es un poco para recordar si se ejecuta con la mano , por lo que es posible que desee envolverlos en su propio comando para facilitar la vida (por ejemplo, algo así como bin/console my:migrations:status --env=dev --db=special
). Tampoco es un problema si usted tiene un script de despliegue fiesta, como:
#!/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"
El único problema que encontré con este enfoque es que si utiliza diferentes nombres db sobre el desarrollo, prueba, puesta en escena y la producción hay que añadir múltiples condiciones Sería más fácil si pudiéramos tener acceso al parámetro entityManager. – Sergi