Do You PHP はてブロ

Do You PHPはてなからはてブロに移動しました

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
$