यह प्रश्न थोड़ा पुराना है, लेकिन यह पहली बार आया जब मैं वही बात पूछ रहा था। मुझे अपना जवाब Doctrine migrations configuration docs में मिला। मान लीजिए कि आप दो डेटाबेस के लिए कनेक्शन, अपने स्वयं के इकाई प्रबंधकों के साथ प्रत्येक (एक्सएमएल, एनोटेशन नहीं है, और नहीं ऑटो मैप किया तो स्कीमा कॉन्फ़िगरेशन ही 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
तो फिर तुम 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
जैसे कुछ)। यह भी कोई मुद्दा नहीं है अगर आप एक तैनाती बैश स्क्रिप्ट है, जैसे:
#!/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"
समस्या सिर्फ मैं इस दृष्टिकोण के साथ पाया गया कि आप एक से अधिक जोड़ने के लिए अगर आप विकास, परीक्षण, मचान और उत्पादन पर अलग db नाम का उपयोग है शर्तेँ। अगर हम इकाई प्रबंधक पैरामीटर तक पहुंच सकते हैं तो यह आसान होगा। – Sergi