2014-04-08 51 views
0

我是Zend Framework 2和Doctrine開發者的新手。我找不到下面描述的問題的答案。帶前綴的多個數據庫

我爲一個網站使用多個數據庫。例如,有一個用戶數據庫包含所有用戶詳細信息和一個包含統計信息的數據庫。有可能有一個用戶的統計數據,所以兩個數據庫之間存在關係(約束)。對於以前的項目,我使用了一個配置文件和一個具有實體的類/目錄(對於一個數據庫)。

  • 如何在具有正確表關係的項目中使用多個數據庫?
  • 我該在哪裏存儲數據庫配置?
  • 我該在哪裏存儲實體?

在同一個項目中,我使用多個版本的數據庫(開發,測試,生產),所以我想使用數據庫名稱的前綴。例如dev_users和tst_users。 我想我應該從一個配置文件中使用一個前綴,並在某處使用它作爲數據庫的前綴。

  • 我該如何爲所有數據庫加上前綴?

最後我真的很好奇,當有多個模塊使用它們時,其他人如何使用數據庫實體。

回答

0
  • 如何在具有正確表關係的項目中使用多個數據庫?

Doctrine爲每個數據庫連接使用一個實體管理器。所以你可以連接到多個數據庫,但你不能鏈接這些實體。從Doctrine或數據庫內部對實體施加約束的唯一方法是如果它們在同一個數據庫中。

您可以自己卻強制約束和使用兩個獨立的實體管理器 但是我不會推薦這

  • 如何/我應該在哪裏存放數據庫的配置?

數據庫連接細節應貯存在您的/config/autoload/local.php/config/autoload/{ownname}.local.php和ownname例如,您可以選擇「教義」

doctrine.local.php

<?php 

return array(
    'doctrine' => array(
     'connection' => array(
      'orm_default' => array(
       'configuration' => 'orm_default', 
       'driverClass' =>'Doctrine\DBAL\Driver\PDOMySql\Driver', 
       'eventmanager' => 'orm_default', 
       'params' => array(
        'host' => 'localhost', 
        'port' => '3306', 
        'user' => '{username}', 
        'password' => '{password}', 
        'dbname' => '{db}', 
       ), 
      ), 
     ), 
    ), 
); 

的一般原則設置像您的實體位於閱讀類元數據可以放在/config/autoload/global.php文件或以global.php結尾的文件中,就像之前的本地文件一樣,或者您可以將其存儲在您的模塊配置文件中

  • 我該在哪裏存儲實體?

的實體應存放你的模塊放在一個目錄Entity,如: 根/模塊/ {模塊名}/src目錄/ {模塊名} /實體/

爲如何存儲他們看到:Doctrine Documentation

如果您使用實體多個模塊,最好是做一個通用模塊,並把那作爲一個依賴與所有需要這種實體

  • 測試模模塊Ë

你可以改變自己的數據庫,用於測試的環境或者使用一個模塊的配置文件之間chnaging,如: Config Module這是通過誰做ZF2

+0

這是我現在使用的配置人民作出。它不適用於多個數據庫,因爲* {db} *僅設置爲* 1 * db。這也不適用於數據庫的前綴。 –

+0

如果你創建一個抽象工廠,你可以在servicemanager中爲你的服務添加前綴,並根據你提供的配置創建儘可能多的適配器 –