2011-03-26 112 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