複数の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に関するお問い合わせ
[重要]現在公式にセキュリティサポートが切れていないPHPは8.1以上、MySQLは8.0以上で、対応しているEC-CUBEバージョンは4.2以上です。古いEC-CUBEを使っている方は適切なタイミングでバージョンアップをご検討ください。