2017-06-12 94 views
0

我在Symfony 2.8项目中使用原则ORM。如何设置与doctrine2和symfony的第二个数据库连接?

我的项目包含几个Bundle。对于生成报告的一个Bundle,我希望将数据库服务器与从属复制一起使用,以免压缩主数据库服务器。 如何设置?

我试过到目前为止:

在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 


      slave: 
       driver: pdo_mysql 
       host:  '%database_host_slave%' 
       port:  '%database_port_slave%' 
       dbname: '%database_name_slave%' 
       user:  '%database_user_slave%' 
       password: '%database_password_slave%' 
       charset: UTF8 

在这里,我创建与存储在我的parameters.yml值我的第二个数据库连接。

我似乎得到了我试图在同一个文件中设置不正确的orm配置。 让我第一次解释我需要什么: 我有一个运行控制台命令的“ReportingBundle”。实体管理器只需要向所需的数据库服务器提供适当的授权。查询本身就是SQL,我不使用这些实体。

我这个包service.yml:

services: 
    myproject.reporting.service.csv_report_attachment: 
     class: Myproject\ReportingBundle\Service\DefaultCsvReportAttachmentService 
     arguments: ['@doctrine.orm.slave_entity_manager', '@logger', '@myproject.reporting.service.php_template_engine', 'reportingHtmlMailTemplate.php'] 

现在我的非功能ORM设置在config.yml:

ORM配置

orm: 
     auto_generate_proxy_classes: '%kernel.debug%' 
     # naming_strategy: doctrine.orm.naming_strategy.underscore 
     default_entity_manager: default 
     entity_managers: 

      slave: 
       connection: slave 
       mappings: 
        MyprojectReportingBundle: ~ 

      default: 
       connection: default 
       auto_mapping : true 
       metadata_cache_driver: redis 
       query_cache_driver: redis 
       result_cache_driver: redis 

这导致

[Doctrine\ORM\ORMException]        
    Unknown Entity namespace alias 'MyprojectReportingBundle'. 

我试图按照此文件: http://symfony.com/doc/current/reference/configuration/doctrine.html#custom-mapping-entities-in-a-bundle

问题: 什么是正确的语法,所以我的查询从服务器,而不是默认的服务器上运行?

+0

如果您从slave的entity_managers定义中删除映射属性并使用auto_mapping:true,那么它是否工作? – beterthanlife

+0

我试过了。 然后它抱怨,你不能一次使用automapping:true为两个实体管理器。 [LogicException] 你不能让一个以上的经理“auto_mapping”在同一时间(在“从”发现和默认“)。 –

回答

0

我相信你已经配置正确。但是,您需要确保在Bundle命名空间中定义了Entity类。所以举个例子,你想在你的例子中定义在Myproject\ReportingBundle\Entity范围内的所有实体。

+0

我有一Entoty在这个捆绑的另一个在姐姐包。 但是定义我不确定他们是否被使用,因为我“只”有一个复杂的SQL查询,我执行。 –

相关问题