長い間グーグルで探していましたが、バンドル用の2番目のDB接続を作成する方法という理想的なソリューションを探しています。私のシステムは多くのバンドルで構成されていますが、そのうちの 1 つは元の DB だけでなく、別の DB にも接続する必要があります (一度に 2 つの接続が必要です)。
バンドルの boot() メソッドでこの方法を試しました:
$connectionFactory = $this->get('doctrine.dbal.connection_factory');
$connection = $connectionFactory->createConnection(array(
'driver' => 'pdo_mysql',
'user' => 'my_user',
'password' => 'my_pass',
'host' => '',
'dbname' => 'my_dbname',
));
$this->container->set('doctrine.dbal.new_connection', $connection);
$em = $this->get('doctrine')->getEntityManager('new');
しかし、エラーがスローされました: "new" という名前の Doctrine EntityManager は存在しません。
そして、config.yml に 2 番目の接続を追加しようとすると、次のように呼び出します。
$this->get('doctrine')->getEntityManager('second_connection')
同じエラーがスローされます。
EDIT: エラーが解消されました。これは、doctrine.dbal.connections の「mappings」パラメータの不適切な設定が原因でした。
ここで、バンドルによって処理されるデータベースへの接続を作成したいと考えています。app/config/config.yml または他の構成は、この接続について認識していません。簡単に言えば、新しいバンドルのユーザー オープン ページが独自の接続とエンティティ マネージャーを処理すると、新しい接続が自動的に作成され、2 つ以上のデータベースにアクセスできるようになります。1 つ目は app/config/config.yml からのオリジナルで、2 つ目はバンドル接続です。
doctrin.dbal の app/config/config.yml と doctrine.orm のエンティティ マネージャー内で 2 つのデータベース接続を事前定義してみました。それはうまくいきますが、上で書いたように私にとっては不便です。
別の賢明な解決策があります。それを解決するにはどうすればよいですか?