【发布时间】:2016-04-22 08:27:11
【问题描述】:
我正在使用 Symfony3 应用程序,我想建立到不同数据库的多个连接。
我一直在环顾四周,发现了有关 entityManagers 和 DB 连接的文档。我的 config.yml 配置如下:
config.yml
doctrine:
dbal:
default_connection: default
connections:
default:
driver: pdo_mysql
host: "%database_host%"
port: "%database_port%"
dbname: "%database_name%"
user: "%database_user%"
password: "%database_password%"
charset: UTF8
mapping_types:
enum: string
other:
driver: pdo_mysql
host: "%database_host2%"
port: "%database_port2%"
dbname: "%database_name2%"
user: "%database_user2%"
password: "%database_password2%"
charset: UTF8
mapping_types:
enum: string
orm:
dql:
string_functions:
DAY: DoctrineExtensions\Query\Mysql\Day
MONTH: DoctrineExtensions\Query\Mysql\Month
YEAR: DoctrineExtensions\Query\Mysql\Year
auto_generate_proxy_classes: "%kernel.debug%"
naming_strategy: doctrine.orm.naming_strategy.underscore
auto_mapping: true
所以现在我可以像这样访问我的数据库了:
$con2 = $this->get('doctrine.dbal.other_connection');
$orders = $con2->fetchAll('SELECT * FROM orders');
但我真正需要的是配置第二个 orm-mapping 连接,这将允许我与实体交互而不是直接处理第二个数据库。因此,正如文档所说,我在学说 orm 标签下添加了:
orm:
dql:
string_functions:
DAY: DoctrineExtensions\Query\Mysql\Day
MONTH: DoctrineExtensions\Query\Mysql\Month
YEAR: DoctrineExtensions\Query\Mysql\Year
auto_generate_proxy_classes: "%kernel.debug%"
naming_strategy: doctrine.orm.naming_strategy.underscore
auto_mapping: true
default_entity_manager: default
entity_managers:
default:
connection: default
mappings:
AppBundle: ~
other:
connection: other
mappings:
OtherBundle: ~
这会引发异常:
Parser.php 第 296 行中的 ParseException: 无法在第 78 行解析(靠近“entity_managers:”)。
我应该如何配置我的 config.yml 以允许我的第二个数据库连接的 orm 映射?是否应该删除dql标签,只在某个实体管理器标签下使用?
【问题讨论】:
-
该错误与 YAML 语法错误有关。但是,您在此处显示的示例配置并未反映这一点。您可能希望显示完整的配置文件。
标签: php orm doctrine-orm mapping symfony