我正在开发一个网站,我必须使用来自两个不同数据库的数据(一个本地具有完全访问权限,一个外部只读取)。
其中一个“本地”实体需要映射到“外部”实体 外部实体不会更改其数据,因为无论如何我都无法将这些数据保存到数据库中。
有没有办法标记这个映射,以便在检索本地实体时拉出外部实体?
答案 0 :(得分: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()
]);
...
}