複数のエンティティマネージャと連携する方法

Symfony2のアプリケーションで複数のエンティティマネージャを使用することができます。これらは異なるデータベースや、完全に異なるエンティティセットを利用しようとする場合に必要となります。言い換えれば単一のデータベースに接続する単一のエンティティマネージャは別のデータベースに接続する別のエンティティマネージャが残りを処理している間に、複数のエンティティを処理します。

Note

複数のエンティティマネージャを使用する事はかなり簡単ですが、高度であり通常は必要ではありません。このレイヤーに複雑性を追加する前に、複数のエンティティマネージャの必要性を確認してください。

次の設定コードは、2つのエンティティマネージャを設定する方法を示しています :

  • YAML
    doctrine:
        orm:
            default_entity_manager:   default
            entity_managers:
                default:
                    connection:       default
                    mappings:
                        AcmeDemoBundle: ~
                        AcmeStoreBundle: ~
                customer:
                    connection:       customer
                    mappings:
                        AcmeCustomerBundle: ~
    

このケースでは、2つのエンティティマネージャを定義し、 defaultcustomer と名付けています。 default エンティティマネージャは AcmeDemoBundleAcmeStoreBundle のエンティティを管理し、 customer エンティティマネージャは AcmeCustomerBundle のエンティティを管理しています。

複数のエンティティマネージャを利用する際、あなたはどのエンティティーマネージャを利用するか明確にする必要があります。省略しない場合、エンティティマネージャの名前を指定する必要がありますが、省略するとデフォルトのエンティティマネージャ(すなわち default )が返されます。

class UserController extends Controller
{
    public function indexAction()
    {
        // both return the "default" em
        $em = $this->get('doctrine')->getEntityManager();
        $em = $this->get('doctrine')->getEntityManager('default');

        $customerEm =  $this->get('doctrine')->getEntityManager('customer');
    }
}

以前と同じように Doctrine を利用できます。 default エンティティマネージャでエンティティを扱う事や customer エンティティマネージャを使用してエンティティを扱えます。

ソース