0
語境
我正在開發一個網站,我必須從兩個不同的數據庫(一個地方具有完全訪問權限,在一個外部只讀)使用的數據。映射實體在2個(或以上)的數據庫
「本地」實體之一需要映射到「外部」實體。
外部實體將不會更改其數據,因爲無論如何我都無法將它們持久保存到數據庫中。
問題
有沒有一種方法,使得外部實體一起時,我檢索本地實體拉到紀念這個映射?
我正在開發一個網站,我必須從兩個不同的數據庫(一個地方具有完全訪問權限,在一個外部只讀)使用的數據。映射實體在2個(或以上)的數據庫
「本地」實體之一需要映射到「外部」實體。
外部實體將不會更改其數據,因爲無論如何我都無法將它們持久保存到數據庫中。
有沒有一種方法,使得外部實體一起時,我檢索本地實體拉到紀念這個映射?
簡短的回答,第
您可以設置多個數據庫連接,並使用相同的實體類對他們倆的。但是單個實體將無法擁有映射到不同數據庫的屬性。您可能有參考字段,但那些只需要是您可以使用其他連接查找它們的鍵。例如,想象以下設置:
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()
]);
...
}