【问题标题】:Multiple database connection in Doctrine2 and Zend frameworkDoctrine2 和 Zend 框架中的多数据库连接
【发布时间】:2011-03-26 13:13:04
【问题描述】:

我目前正在开发一个使用 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 如何知道哪些实体类映射到数据库?感谢您的帮助。

【问题讨论】:

  • re:你之前的标志:StackOverflow 不是论坛;答案应该是答案。如果您要阅读faq,您会明白添加一个基本上是“我有同样的问题,您是否找到解决方法”的答案在这里是不可接受的。像这样的“答案”会被立即删除。请不要再这样做了。谢谢。

标签: php zend-framework doctrine-orm


【解决方案1】:

我不认为您可以将实体绑定到特定连接,这在 Doctrine 2 架构中没有意义。

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

edit 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 个实体管理器)在处理跨数据库连接时是否会导致问题。不确定 Doctrine 2 目前是否支持这一点。网络文档似乎对此保持沉默。有什么想法吗?谢谢。
  • 澄清一下,使用点符号(例如@Table(name="Dbname.TblName")我可以使用 Doctrine 连接吗?
【解决方案2】:

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

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

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

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

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

【讨论】:

  • 感谢您的回复,但我认为您提出的建议(和链接)不是针对 Doctrine 2 而是针对 Doctrine 1.x。
猜你喜欢
  • 1970-01-01
  • 2010-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多