Pie*_*NAY 13 php orm symfony doctrine-orm
我有一个带有MySQL db的Symfony2项目:
#app/config/config.yml
doctrine:
dbal:
driver: %database_driver% # <
host: %database_host% # |
port: %database_port% # | Defined in
dbname: %database_name% # | parameters.ini
user: %database_user% # |
password: %database_password% # <
orm:
auto_generate_proxy_classes: %kernel.debug%
auto_mapping: true
Run Code Online (Sandbox Code Playgroud)
现在我想对其他数据库进行简单的查询(比如例程调用).
我应该在配置文件中定义其他dbal吗?
如果是,在保持项目的默认连接时如何配置?
我是否必须为每个连接配置一个orm?
Man*_*eUK 22
您需要添加另一级别的配置并使用多个实体管理器,因为Doctrine每个数据库连接使用1个实体管理器.您的配置可能如下所示:
doctrine:
dbal:
connections:
default:
driver: %database_driver% # <
host: %database_host% # |
port: %database_port% # | Defined in
dbname: %database_name% # | parameters.ini
user: %database_user% # |
password: %database_password% # <
another:
driver: %database2_driver% # <
host: %database2_host% # |
port: %database2_port% # | Defined in
dbname: %database2_name% # | parameters.ini
user: %database2_user% # |
password: %database2_password% # <
Run Code Online (Sandbox Code Playgroud)
然后,您可以定义多个实体管理器
doctrine:
orm:
default_entity_manager: default
entity_managers:
default:
connection: default
mappings:
AcmeDemoBundle: ~
AcmeStoreBundle: ~
another:
connection: another
mappings:
AcmeCustomerBundle: ~
Run Code Online (Sandbox Code Playgroud)
然后在您的操作中,您可以使用以下内容来获取正确的实体管理器:
$em = $this->get('doctrine')->getEntityManager('default');
$em = $this->get('doctrine')->getEntityManager('another');
Run Code Online (Sandbox Code Playgroud)
取决于您需要的实体经理