我有一个与两个不同数据库对话的应用程序。对于我的某个实体School
,我收到以下错误:
SQLSTATE[42S02]: Base table or view not found: 1146 Table 'pressbox.schools' doesn't exist
这是有道理的,因为没有pressbox.schools
。它是fnt.schools
。它试图与错误的数据库交谈。
如何告诉我的实体我希望它使用哪种映射?我当然宁愿参考映射而不是数据库名称本身,这可能因环境而异。
答案 0 :(得分:1)
首先,在配置文件中声明您的连接( config.yml 会没问题):
doctrine:
dbal:
default_connection: pressbox # change it as you wish
connections:
pressbox:
driver: %database_driver%
host: %database_host%
port: %database_port%
dbname: pressbox
user: pressbox_usr
password: pressbox_pwd
charset: UTF8
fnt:
driver: %database_driver%
host: %database_host%
port: %database_port%
dbname: fnt
user: fnt_usr
password: fnt_pwd
charset: UTF8
然后声明实体经理:
doctrine:
orm:
default_entity_manager: pressbox
entity_managers:
pressbox:
connection: web
fnt:
connection: fnt
现在,在控制器中,您可以通过将其名称传递给getEntityManager()
来告诉Doctrine使用哪个实体管理器:
$fntEm = $this->getDoctrine()->getEntityManager('fnt');
假设 fnt 表的实体管理器被调用相同的名称。
答案 1 :(得分:0)
我认为跨数据库关系非常复杂,或者您必须通过一些插件手动编写代码。
我发现了关于可能对您有帮助的同一主题的问题:
Multiple database connection in Doctrine2 and Zend framework