2016-05-09 22 views
0

語境

我正在開發一個網站,我必須從兩個不同的數據庫(一個地方具有完全訪問權限,在一個外部只讀)使用的數據。映射實體在2個(或以上)的數據庫

「本地」實體之一需要映射到「外部」實體。
外部實體將不會更改其數據,因爲無論如何我都無法將它們持久保存到數據庫中。

問題

有沒有一種方法,使得外部實體一起時,我檢索本地實體拉到紀念這個映射?

回答

1

簡短的回答,第

您可以設置多個數據庫連接,並使用相同的實體類對他們倆的。但是單個實體將無法擁有映射到不同數據庫的屬性。您可能有參考字段,但那些只需要是您可以使用其他連接查找它們的鍵。例如,想象以下設置:

doctrine: 
    dbal: 
     default_connection: default 
     connections: 
      default: 
       driver: '%database_driver%' 
       host:  '%database_host%' 
       port:  '%database_port%' 
       dbname: '%database_name%' 
       user:  '%database_user%' 
       password: '%database_password%' 
       charset: UTF8 
      customer: 
       driver: '%database_driver2%' 
       host:  '%database_host2%' 
       port:  '%database_port2%' 
       dbname: '%database_name2%' 
       user:  '%database_user2%' 
       password: '%database_password2%' 
       charset: UTF8 

    orm: 
     default_entity_manager: default 
     entity_managers: 
      default: 
       connection: default 
       mappings: 
        AcmeBundle: ~ 
      customer: 
       connection: customer 
       mappings: 
        AcmeBundle: ~ 

兩個管理器都將使用AcmeBundle中的實體類。那麼你可以做點像

public function someControllerAction(){ 
    // Get customer from the default connection 
    $customer = $this->getDoctrine() 
        ->getManager() // If no value is provided the default is implied 
        ->getRepository('AcmeBundle:Customer') 
        ->findOneBy([ 
         'id'=>12 
        ]); 

    // Get the customers details from another connection 
    $customerDetails = $this->getDoctrine() 
          ->getManager('customer') 
          ->getRepository('AcmeBundle:CustomerDetails') 
          ->findOneBy([ 
           'customer_details_id' => $customer->getDetailsId() 
          ]); 
    ... 
} 
相關問題