Doctrine2没有Symfony2的多个DB?

时间:2013-07-02 17:02:38

标签: symfony orm doctrine-orm composer-php dbal

我知道在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的?

1 个答案:

答案 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查询。如果您需要实体管理器,则必须按照上述文档中的说明对其进行初始化,或者您可以找到另一个可以“复制”的实体管理器工厂类。