我有一个与两个不同数据库对话的应用程序。对于我的一个实体,School
我收到以下错误:
SQLSTATE[42S02]: Base table or view not found: 1146 Table 'pressbox.schools' doesn't exist
这是有道理的,因为没有pressbox.schools
. 是fnt.schools
。它试图与错误的数据库通信。
如何告诉我的实体我希望它使用哪个映射?我当然宁愿参考映射而不是数据库名称本身,这可能因环境而异。
我有一个与两个不同数据库对话的应用程序。对于我的一个实体,School
我收到以下错误:
SQLSTATE[42S02]: Base table or view not found: 1146 Table 'pressbox.schools' doesn't exist
这是有道理的,因为没有pressbox.schools
. 是fnt.schools
。它试图与错误的数据库通信。
如何告诉我的实体我希望它使用哪个映射?我当然宁愿参考映射而不是数据库名称本身,这可能因环境而异。
首先,在配置文件中声明您的连接(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
现在,在控制器中,您可以通过将名称传递给 Doctrine 来告诉 Doctrine 使用哪个实体管理器getEntityManager()
:
$fntEm = $this->getDoctrine()->getEntityManager('fnt');
假设fnt表的实体管理器被称为相同的名称。