複数のEntityManagerを利用し、複数のデータベースからデータを取得したり更新する方法はないのかというご質問をよくお受けします。
既存サイトとの連携やモールショップ化では頻繁に必要となってくる技術かと思います。
なかなか説明するのは難しいのですが、Doctrineの設定上でアクセスするデータベースは幾つでも増やすことが可能です。
具体的にはApplication.phpのorm.ems.optionsに配列形式で複数の設定を渡してやります。
$this->register(new \Dflydev\Silex\Provider\DoctrineOrm\DoctrineOrmServiceProvider(), array( 'orm.proxies_dir' => __DIR__.'/../../app/cache/doctrine/proxies', // ここに複数の設定を渡す 'orm.ems.options' => array( 'default' => $options, 'default2' => $options2, ), 'orm.custom.functions.string' => array( 'NORMALIZE' => 'Eccube\Doctrine\ORM\Query\Normalize', ), 'orm.custom.functions.numeric' => array( 'EXTRACT' => 'Eccube\Doctrine\ORM\Query\Extract', ), ));
この新しい設定$options2にはデータベースの接続情報(connection)とDoctrineのマッピング情報(dcm.yml)の場所を指定することで複数のエンティティマネージャを利用可能となります。
コントローラからは$em = $app[‘orm.ems’][‘default2’]という形式でEntityManagerにアクセスが可能です。
EC-CUBEカスタマイズに関するお問い合わせはこちら
EC-CUBE4をカスタマイズする方必読
EC-CUBEはSymfonyをベースに作られており、EC-CUBE4のカスタマイズにはSymfomyの学習を避けて通れません。弊社ではまずこの本を読むよう薦めています。