gpt4 book ai didi

doctrine-orm - zf2 doctrine2 和 Zend\Db\Adapter\Adapter 使用一个数据库连接

转载 作者:行者123 更新时间:2023-12-01 08:09:45 28 4
gpt4 key购买 nike

我将 doctrine2 与 ZF2 一起使用,我的一些库与 Zend\Db\Adapter\Adapter 一起使用,其他的与 doctrine2 一起使用。现在,他们两次连接到数据库。是否可以在原则和标准 ZF2 数据库适配器中使用一个数据库连接?

最佳答案

DoctrineORM 模块接受 PDO 资源或服务名称,其中实例可以位于服务管理器中,而不是通常的连接参数。

第一步是创建一个服务工厂,它从 Zend\Db\Adapter\Adapter 服务中检索 PDO 资源

<?php
namespace Application\Db\Service;

use Zend\ServiceManager\FactoryInterface;
use Zend\ServiceManager\ServiceLocatorInterface;
use Zend\ServiceManager\Exception\ServiceNotCreatedException;

class PdoResourceFactory implements FactoryInterface
{
/**
* @param ServiceLocatorInterface $serviceLocator
* @return \PDO resource
*/
public function createService(ServiceLocatorInterface $services)
{
$dbAdapter = $services->get('Zend\Db\Adapter\Adapter');

$pdo = $dbAdapter->getDriver()->getConnection()->getResource();
if (!$pdo instanceof \PDO) {
throw new ServiceNotCreatedException('Connection resource must be an instance of PDO');
}
return $pdo;
}
}

一旦有了工厂,只需将它添加到服务管理器,为 Zend\Db\Adapter\Adapter 配置 db 参数并告诉 doctrine 使用现有的 PdoResource 来自服务管理器的连接。

假设您在一个文件中完成所有这些操作,假设 dbconn.local.php...

<?php
return array (
'service_manager' => array(
'factories' => array(
'Zend\Db\Adapter\Adapter' => 'Zend\Db\Adapter\AdapterServiceFactory',
// include the pdo resource factory
'PdoResource' => 'Application\Db\Service\PdoResourceFactory',
),
),
// db adapter config
'db' => array(
'driver' => 'pdo',
'dsn' => 'mysql:dbname=database;host=127.0.0.1',
'username' => 'username',
'password' => 'password',
),

'doctrine' => array (
'connection' => array (
'orm_default' => array (
'driverClass' => 'Doctrine\DBAL\Driver\PDOMySql\Driver',
// use the resource from the zend adapter
'pdo' => 'PdoResource',
),
),
),
);

关于doctrine-orm - zf2 doctrine2 和 Zend\Db\Adapter\Adapter 使用一个数据库连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21072177/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com