使用与Doctrine主/从连接建立的PDO连接

时间:2016-09-08 05:55:48

标签: php pdo doctrine-orm

我在预先存在的软件中采用了Doctrine,并且希望Doctrine与遗留代码共享相同的PDO连接。

我知道你可以告诉Doctrine使用如此建立的连接:

$em = EntityManager::create(['pdo' => $pdo], $ormConfiguration);

我无法找到主/从连接的正确组合。这是我期望的工作:

$em = EntityManager::create(
    [
        'wrapperClass' => \Doctrine\DBAL\Connections\MasterSlaveConnection::class,
        'master' => ['pdo' => $pdoMaster],
        'slaves' => [
            ['pdo' => $pdoSlave]
        ]
    ],
    $ormConfiguration
);

这会产生以下错误:

  

带有消息的未捕获异常'Doctrine \ DBAL \ DBALException'如果没有为DriverManager :: getConnection()提供PDO实例,则必须使用选项'driver'或'driverClass'。'。

通过代码阅读,看起来不支持使用Master / Slave与Doctrine建立连接。但我不确定。大多数文档都没有详细介绍如何使用已建立的连接。

1 个答案:

答案 0 :(得分:0)

我认为您需要使用DriverManager::getConnection创建连接,并在创建实体管理器时使用连接。

这是我发现的一个示例: https://gist.github.com/ricfrank/d6f6317a1a1434cdc364

$conn = \Doctrine\DBAL\DriverManager::getConnection(array(
        'wrapperClass' => 'Doctrine\DBAL\Connections\MasterSlaveConnection',
        'driver' => 'pdo_mysql',
        'keepSlave' => true,
        'master' => array(
            'user'     => 'ideato',
            'password' => 'ideato',
            'dbname'   => 'db_ideato'
        ),
        'slaves' => array(
            array(
                'user' => 'ideato',
                'password' => 'ideato',
                'dbname' => 'db_ideato_slave'
            )
        )
    )
);

$entityManager = EntityManager::create($conn, $config);