我知道在Symfony2中使用Doctrinebundle可以在Doctrine下实例化多个数据库连接...
$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',
));
如果您使用PURELY Doctrine,我很好奇,如果是这样的话,我已经通过Composer设置了Doctrine,就像这样......
{
"config": {
"vendor-dir": "lib/"
},
"require": {
"doctrine/orm": "2.3.4",
"doctrine/dbal": "2.3.4"
}
}
一直在寻找我的ConnectionFactory
课程,但我没有在任何地方看到它?我是否需要使用Symfony2来执行此操作?
我应该从DoctrineBundle下载ConnectionFactory.php并将其包含在我的DBAL文件夹中吗? IDK的?
答案 0 :(得分:1)
捆绑包仅在需要symfony的上下文中,它将orm包装到symfony基础结构(服务等)中。对于纯粹使用orm,您应该阅读 ORM: Installation and Configuration 。如您所见,您必须自己使用EntityManager::create($dbParams, $config)
创建实体管理器,因此只需为您的不同数据库创建不同的实体管理器。
对于DBAL使用,您应该阅读 DBAL: Configuration 并查看,只需通过DriverManager::getConnection($connectionParams, $config);
即可获得连接但是如果您确定ConnectionFactory
不依赖于symfony stuff 你真的需要它,你可以尝试将它复制到你的代码中并构建一个新工厂以获得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查询。如果您需要实体管理器,则必须按照上述文档中的说明对其进行初始化,或者您可以找到另一个可以“复制”的实体管理器工厂类。