2013-03-27 50 views
7

我的目標是通過訪問One Project Bundle中的多個數據庫Symfony2:如何從SAME Bundle中的MULTIPLE Existing Databases生成實體?

我通過Symfony2的文檔閱讀和管理,做好如下:使用

  1. configure multiple connections for different Bundles
  2. generate Entities from ONE Existing Database

    php app/console doctrine:mapping:import AcmeBlogBundle annotation 
    php app/console doctrine:generate:entities AcmeBlogBundle 
    

但我不能找到辦法到從同一個包中的多個現有數據庫生成實體,以便我可以訪問One Bundle中的多個數據庫。有任何想法嗎?

P.S.我不熟悉教義。所以實際上如果沒有Doctrine的話就有辦法做Symfony2,我也會很感激。

更新#1:

Cerad's answer來相當接近。但還有一個問題尚未解決。由於我在不同的數據庫中有相同的表名,最好將它們組織到實體文件夾內部的分區文件夾中。我查看過類似帖子,如thisthat。但是這些解決方案並不適合我。他們的解決方案只是將所有實體直接放到實體文件夾中,而忽略config.yml中的指定dir選項。有解決這個問題的方法嗎?

回答

4

第一步配置多個實體管理器(不是連接),每個數據庫一個。然後在doctrine命令中使用--em選項指定要使用哪個實體管理器。

php app/console doctrine:mapping:import "AcmeBlogBundle" annotation --em=name1 
php app/console doctrine:mapping:import "AcmeBlogBundle" annotation --em=name2 

請注意,您不能直接在多個數據庫中使用教義進行查詢(加入)。至少不是很容易。只要你打算一次限制你的查詢到一個數據庫,那麼你會沒事的。

這實際上是一個有點高級的話題。您可能需要花一些時間閱讀教條文檔。也許更容易開始使用一個數據庫,然後再拆分。

+0

感謝您的回覆。仍然有一個問題尚未解決。因爲我在不同的數據庫中有一些相同的表名。所以最好將它們組織到實體文件夾內的分部文件夾中。我已檢查http://stackoverflow.com/questions/13765785/doctrine-generate-entities-namespace-issue,但它似乎不能做對嗎?是否有解決此問題的方法 – Capitaine 2013-03-28 09:35:13

+0

唯一的解決方法是將數據庫名稱添加到表名中。但這樣做意味着各種教條命令將停止工作,這意味着硬編碼數據庫名稱。根據您的需要,您可能可以使用sql視圖來基本更改表名稱。我認爲你使用多個捆綁包會更好。 – Cerad 2013-03-28 12:21:51

+1

您應該創建一個新的symfony安裝,生成一個捆綁下拉您的表格,然後編輯命名空間並將這些文件複製到您現有的捆綁包中。這是一種痛苦,但比試圖在映射生成器中解決問題更容易。你可以肯定有實體下的命名空間(我在我的項目中有幾個級別)。 'Bundle/Entity/ThingsThatMakeMeMad/SpilledMilk.php'等 – 2013-04-02 14:18:30