我在预先存在的软件中采用了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建立连接。但我不确定。大多数文档都没有详细介绍如何使用已建立的连接。
答案 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);