2013-12-13 84 views
1

標題聽起來有點奇怪,但我會試着解釋。Symfony2:在具有自己的數據庫的兩種環境中複製實體

我想爲客戶,生產環境和質量保證環境提供兩種環境。客戶詢問是否可以在質量保證環境中創建「產品」,然後將其複製到生產環境中。這甚至有可能嗎?

環境具有各自的數據庫配置。

+1

IMO,你的問題聽起來更像一個數據庫問題而不是Symfony2。你看看數據庫集羣解決方案嗎?國際海事組織,使數據庫集羣比嘗試同步數據庫與一些PHP代碼更合適。 – egeloen

回答

2

這是可能的,你需要兩個實體管理

//config.yml 
doctrine: 
    dbal: 
     default_connection: default 
     connections: 
      client: 
       driver: %database_driver% 
       host:  %database_host% 
       port:  %database_port% 
       dbname: %database_name% 
       user:  %database_user% 
       password: %database_password% 
       charset: UTF8 
      qa: 
       driver: %database_ga_driver% 
       host:  %database_ga_host% 
       port:  %database_ga_port% 
       dbname: %database_ga_name% 
       user:  %database_ga_user% 
       password: %database_ga_password% 
       charset: UTF8 
    orm: 
     default_entity_manager: default 
     entity_managers: 
      default: 
       connection:  default 
       mappings: 
        AcmeProductBundle: ~ 
      qa: 
       connection:  qa 
       mappings: 
        AcmeProductBundle: ~ 

然後,只需編寫一些功能複製的對象,有些操作會看起來像:

$em = $this->getDoctrine()->getManager(); 
$qa_em = $this->getDoctrine()->getManager('qa'); 

$qa_object = $qa_em->getRepository('AcmeProductBundle:Product')->find(1); 

$em->persist($qa_object); 
$em->flush(); 
0

不是Symfony2問題。您需要的一種可能的解決方案是創建一個可以轉化爲「真實」實體的「草稿」實體,但您可以在生產環境中執行此操作。

該草稿實體可以完全像真實的草案,但會駐留在自己的表格等中。然後添加某種過程,允許用戶將「草稿」轉換爲「實際」實體,可能通過一個服務(就好像某些時候你不能在其中一個實體中添加/刪除功能一樣,你有一個集中點來進行修改)。

但實際上,最簡單的方法是給您的真實實體添加一個「草稿」標誌,並在必要時通過此標誌進行過濾。

相關問題