使用与Doctrine Master/Slave连接建立的PDO连接

Cou*_*les 5 php pdo doctrine-orm

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

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

$em = EntityManager::create(['pdo' => $pdo], $ormConfiguration);
Run Code Online (Sandbox Code Playgroud)

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

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

这会生成以下错误:

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

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

小智 -1

我认为您需要使用创建连接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);
Run Code Online (Sandbox Code Playgroud)

  • 这将为 Doctrine 主/从创建一个新的数据库连接,但问题是如何使用已经建立的 PDO 实例。 (2认同)