Symfony2で複数EntityManager利用時にBundleを新規追加した時の注意点
自分用メモ。
Symfony2で複数のEntityManagerを利用している場合、generate:bundleで新しくBundleを追加してもconfig.ymlのdoctrine.orm.entity_managers.*.mappingsには追加されない。手動でBundleを追加する必要がある。
以下、config.ymlの例。
: doctrine: : orm: auto_generate_proxy_classes: %kernel.debug% default_entity_manager: em1 entity_managers: em1: connection: %database_name% mappings: MyFirstBundle: ~ MySecondBundle: ~ # 追加したBundleを追記する em2: connection: database2 mappings: MyFirstBundle: ~ MySecondBundle: ~ # 追加したBundleを追記する :
ちなみに、新しいBundleに対してgenerate:doctrine:entityでEntityを生成してもdoctrine:schema:createできないし、EntityManager#getRepositoryもできない。
たとえば、MyFirstBundle
$ # $ # 最初のBundleを作成 $ # $ php app/console generate:bundle --namespace=My/FirstBundle --dir=src --no-interaction $ $ # $ # Entity"Customer"を作成 $ # $ php app/console generate:doctrine:entity --entity=MyFirstBundle:Customer --format=annotation --fields="name:string(255) memo:text createdAt:datetime updatedAt:datetime" --no-interaction $ $ # $ # ここでconfig.ymlのentity_managersの設定を行い、 $ # mappingsにMyFirstBundleを指定する $ # $ $ # $ # DBに反映(EntityManagerはem1) $ # $ php app/console doctrine:schema:create $ $ # $ # 2つ目のBundleを作成 $ # $ php app/console generate:bundle --namespace=My/SecondBundle --dir=src --no-interaction $ $ # $ # Entity"Admin"を作成 $ # $ php app/console generate:doctrine:entity --entity=MySecondBundle:Admin --format=annotation --fields="name:string(255) memo:text createdAt:datetime updatedAt:datetime" --no-interaction $ $ # $ # DBに反映(EntityManagerはem1) $ # $ php app/console doctrine:schema:update --force Nothing to update - your database is already in sync with the current entity metadata. $
ここで冒頭のようにconfig.ymlのmappingsにMySecondBundleを追記してやるとadminテーブルが正しく作成される。
$ php app/console doctrine:schema:update --force Updating database schema... Database schema updated successfully! "2" queries were executed $