私は Symfony 2.2 アプリケーションを持っています。このアプリケーションには、DB 内のエンティティを処理するために子をフォークするコマンドがあります。分岐した各子プロセスで Doctrine を強制的に再接続させる適切な方法を見つけるのに苦労しています。
最終的に 1 つのソリューションが機能するようになりました (各子の dev.log で新しい DB 接続を確認できます) が、それが最善の方法であるかどうかはわかりません。コンテナーを各子に渡し、子は新しい接続を作成し、その接続で default_connection サービスを設定します。しかし、これは少し厄介なようです。これについて他に考えはありますか?
$conn = $this->container->get('doctrine')->getConnection();
$conn2 = \Doctrine\DBAL\DriverManager::getConnection($conn->getParams(), $conn->getConfiguration(), $conn->getEventManager());
$this->container->set('doctrine.dbal.default_connection', $conn2);
$this->doctrine = $this->container->get('doctrine');
$this->doctrine->resetManager();
これは子プロセスで行われ、親には影響しませんが、default_connection を変更するという考えは好きではありません。不潔に見えるだけです。