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

我在一个预先存在的软件中采用了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
);

这会生成以下错误:

Uncaught exception ‘Doctrine\DBAL\DBALException’ with message ‘The options ‘driver’ or ‘driverClass’ are mandatory if no PDO instance is given to DriverManager::getConnection().’.

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

最佳答案
我认为您需要使用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);

转载注明原文:php – 使用与Doctrine主/从连接建立的PDO连接 - 代码日志