我有一个 Symfony 2.2 应用程序,它有一个命令,它派生子来处理数据库中的实体。我很难找出强制 Doctrine 在每个分叉子进程中重新连接的正确方法。
我终于找到了一个可行的解决方案(我可以在我的 dev.log 中为每个孩子看到一个新的数据库连接),但我不确定这是否是最好的方法。我将容器传递给每个孩子,然后他们创建一个新连接并使用该连接设置 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 的想法,即使这是在子进程中完成的并且不会影响父进程。只是看起来不干净。