Doctrine2和Zend框架中的多个数据库连接

时间:2011-03-26 13:13:05

标签: php zend-framework doctrine-orm

我目前正在研究使用ZF 1.11.3构建的应用程序 - Doctrine2是使用的ORM组件。我需要使用多个数据库。在application.ini文件中,我按如下方式设置了数据库连接:

resources.doctrine.dbal.connections.default.parameters.dbname   = "db_name_one"
resources.doctrine.dbal.connections.secondary.parameters.dbname   = "db_name_two"

如何根据第二个数据库连接与该连接关联Doctrine2实体类:例如,如果我有来自第二个连接的实体类:

/*
   * @Entity
   * @Table(name="tableOnSecondDatabase")
   */
  Class EntityFromSecond
  {

Doctrine2 / ZF如何知道哪些实体类映射到数据库?谢谢你的帮助。

2 个答案:

答案 0 :(得分:6)

我不会将实体绑定到特定连接,但在Doctrine 2架构中没有意义。

另一方面,你可以做的是拥有两个EntityManagers,每个都有不同的连接选项。您必须在业务逻辑中决定哪个实体由哪个连接管理器处理。

编辑 Doctrine 2不支持跨数据库连接,即具有两个不同的连接并加入它们,即AFAIK。我甚至无法想象,这将如何在PHP PDO级别上运行。 Vijay为一个基于Doctrine 1和第二个的建议,这不完全是跨数据库连接,因为Doctrine 1执行2个查询并合并结果本身,这在性能方面不是最佳的。

另一方面,你可以做的是拥有一个连接,可以访问两个数据库(即,如果它们位于同一个数据库服务器上),或者模式,如果你说的是Postgres,并定义您的实体:

//defining first entity
@Entity
@Table(firstSchema.table_name)
class MyEntity

//defining second entity

@Entity
@Table(secondSchema.table_name)
class SecondEntity

这应该有效,我相信

答案 1 :(得分:3)

如果您为同一个应用程序使用两个不同的数据库,并且它们在您的应用程序中独立提供不同的模块,您可以执行插件级注入并根据请求选择正确的数据库连接。

在以下链接中,使用单独的连接处理多个数据库。

http://stuf.ro/using-multiple-databases-in-doctrine/

如果您在两个数据库之间建立关联并且需要在从这些数据库中的两个连接表之后检索数据,则可以通过指定dbName.tableName.columnName来创建doctrine实体类。这将有点棘手,但为了进一步参考,请查看以下链接:

http://www.doctrine-project.org/blog/cross-database-joins