2011-03-26 111 views
0

我目前正在使用ZF 1.11.3构建的应用程序 - Doctrine2是使用的ORM组件。我需要使用多个数据库。内的application.ini文件,我已经设置了数据库连接,如下所示:例如,如果我有一个实体类:Doctrine2和Zend框架中的多个数据库连接

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将如何知道实体类映射到数据库?感谢您的帮助。

+0

回复:你以前的标志:StackOverflow上不是一个论坛;答案应该是答案。如果您要阅读[faq](http://stackoverflow.com/faq),您应该明白,添加一个答案基本上是“我遇到同样的问题,您是否找到修复程序”在这里是不可接受的。像这样的“答案”被及时删除。请不要再这样做。谢谢。 – Will 2011-03-28 13:04:48

回答

6

我不细化你可以将一个实体绑定到特定的连接,它在Doctrine 2体系结构中是没有意义的。

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

编辑 Doctrine 2不支持跨数据库连接,因为它有两个不同的连接,并且连接它们,AFAIK。我甚至无法想象,如何在PHP PDO级别上工作。 Vijay针对基于Doctrine 1和Second的建议,这不是完全跨数据库连接,因为Doctrine 1执行2个查询并合并结果本身,这不是最佳的性能。

另一方面,你可以做的是建立一个连接,它可以访问两个数据库(也就是说,如果它们在同一个数据库服务器上)或模式,如果你说Postgres ,并定义实体,例如:

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

//defining second entity 

@Entity 
@Table(secondSchema.table_name) 
class SecondEntity 

这应该工作,我相信

+0

áš:感谢您的回复。我认为你的建议值得尝试。但是,我想知道这个解决方案(每个连接1个实体管理器)在处理跨数据库连接时是否会导致问题。不知道这是甚至目前在Doctrine 2中支持。网络文档似乎对此保持沉默。有什么想法吗?谢谢。 – 2011-03-26 20:05:43

+0

谢谢,这对我来说 – 2011-05-03 14:04:07

+0

只是为了澄清,使用点符号(例如@表(名称=“Dbname.TblName”)我可以使用Doctrine加入? – PachinSV 2012-07-04 17:43:16

3

如果您使用的是两个不同的数据库对于相同的应用程序,它们是独立于应用程序,你可以做插件的服务不同的模块根据请求选择正确的db连接。

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

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

如果您有两个数据库之间的关联,需要从两个数据库,这些你可以通过指定dbName.tableName.columnName创建学说实体类的连接表后检索数据。这将是有点棘手,但对于进一步参考看看下面的链接:

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

+1

感谢您的回复,但您提出的建议(以及链接)我认为不适用于Doctrine 2,但适用于Doctrine 1.x. – 2011-03-26 22:09:53