0

我知道在 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 文件夹中吗?身份证?

4

1 回答 1

1

bundle 仅在 symfony 的上下文中需要,它将 orm 包装到 symfony 基础设施(服务等)中。对于纯粹使用 orm,您应该阅读ORM:安装和配置。如您所见,您必须自己创建一个实体管理器EntityManager::create($dbParams, $config),因此只需为您的不同数据库创建不同的实体管理器。

对于 DBAL 的使用,你应该阅读DBAL: Configuration并看到,一个连接可以简单地获得DriverManager::getConnection($connectionParams, $config);但是如果你确定ConnectionFactory它不依赖于 symfony 的东西并且你真的需要它,你可以尝试将它复制到你的代码并构建一个新工厂来获取 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 查询。如果您需要实体管理器,则必须按照上面文档中的说明对其进行初始化,或者您可能会找到另一个可以“复制”的实体管理器工厂类。

于 2013-07-02T19:22:15.533 回答