我知道在Symfony2中使用Doctrinebundle可以在Doctrine下实例化多个DB连接。。。
$connectionFactory = $this->container->get('doctrine.dbal.connection_factory');
$connection = $connectionFactory->createConnection(array(
'driver' => 'pdo_mysql',
'user' => 'foo_user',
'password' => 'foo_pass',
'host' => 'foo_host',
'dbname' => 'foo_db',
));
我很好奇,如果你使用的是纯粹主义,情况是否如此?,我已经通过Composer这样建立了条令…
{
"config": {
"vendor-dir": "lib/"
},
"require": {
"doctrine/orm": "2.3.4",
"doctrine/dbal": "2.3.4"
}
}
一直在找我的ConnectionFactory
课程,但在任何地方都看不到?我需要使用Symfony2吗?
我应该从DoctrineBundle下载ConnectionFactory.php并将其包含在我的DBAL文件夹中吗??idk?
捆绑包仅在symfony所需的上下文中,它将orm封装到symfony基础设施(服务等)中。要纯粹使用orm,您应该阅读orm:安装和配置。正如您所看到的,您必须使用EntityManager::create($dbParams, $config)
自己创建一个实体管理器,所以只需为不同的数据库创建不同的实体管理器即可。
对于DBAL的使用,您应该阅读DBAL:Configuration并看到,连接可以简单地通过DriverManager::getConnection($connectionParams, $config);
获得。但是,如果您确信ConnectionFactory
不依赖于符号,并且您确实需要它,您可以尝试将它复制到您的代码中,并构建一个新的工厂来获得DBAL连接。
$connectionFactory = new ConnectionFactory(array());
$connection = $connectionFactory->createConnection(array(
'driver' => 'pdo_mysql',
'user' => 'foo_user',
'password' => 'foo_pass',
'host' => 'foo_host',
'dbname' => 'foo_db',
));
但请注意,这是一个DBAL连接,即它是一个位于PDO之上的抽象层,仅用于纯SQL查询。如果你需要一个实体管理器,你必须按照上面的文档中提到的那样初始化它,或者你可能找到了另一个可以"复制"的实体管理器工厂类。