Этот вопрос немного старый, но он возник первым, когда я спрашивал о том же.Я нашел свой ответ в документации по миграции доктрины .Допустим, у вас есть соединения для двух баз данных, каждая из которых имеет свои собственные менеджеры сущностей (сопоставленные здесь с XML, а не с аннотациями и не сопоставленные автоматически, поэтому конфигурации схемы могут находиться в одном и том же пути 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
Тогда не включает конфигурации doctrine_migrations
в config.yml
.Вместо этого создайте файл конфигурации для каждого из них:
# 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
Затем, всякий раз, когда вы запускаете какую-либо команду миграции, задайте и менеджер сущностей, и конфигурацию:
bin/console doctrine:migrations:status --env=dev --em=special --configuration=src/MyBundle/Resources/config/migrations/special.yml
Это немного, чтобы запомнитьесли вы работаете вручную, вы можете заключить их в собственную команду, чтобы упростить жизнь (например, что-то вроде bin/console my:migrations:status --env=dev --db=special
).Это также не проблема, если у вас есть сценарий развертывания bash, например:
#!/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"