2017-06-12 100 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查詢,我執行。 –

相關問題