2017-01-23 73 views
1

我嘗試在我的symfony3安裝中管理2個數據庫。 我想有兩個連接,而不是兩個管理器,因爲第二個數據庫只是用於加載外部數據,而不是與orm一起使用。Symfony 3使用服務中的第二個數據庫

我conf.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 
     dbsync: 
      driver: pdo_mysql 
      host:  "%database_sync_host%" 
      port:  "%database_sync_port%" 
      dbname: "%database_sync_name%" 
      user:  "%database_sync_user%" 
      password: "%database_sync_password%" 
      charset: UTF8 

    orm: 
    auto_generate_proxy_classes: "%kernel.debug%" 
    naming_strategy: doctrine.orm.naming_strategy.underscore 
    auto_mapping: true 

在控制器我可以用我的第二個數據庫的SQL與選擇:

...->getManager()->getConnection('dbsync'); 

但我想在服務中使用它,我不知道如何在這種情況下使用的getConnection( 'dbsync')...
我的服務MajUsers.php

<?php 
namespace EntBundle\Service; 

use Doctrine\ORM\EntityManager; 
use EntBundle\Entity\User\User; 

class MajUsers { 

    private $em; 

    /** 
    * @param EntityManager $em 
    */ 
    public function __construct(EntityManager $em) 
    { 
    $this->em = $em; 
    } 

    public function runUpdate() 
    { 
    $conn = $this->em->getManager('dbsync')->getConnection('dbsync'); 
    $personnels_sync = $conn->fetchAll("SELECT * FROM xxxxx WHERE etat = 1 AND login !='' ORDER BY xxx, yyyyLIMIT 10"); 
    ..... 
    ..... 
    } 
} 

我service.yml

ent.maj_users: 
    class: EntBundle\Service\MajUsers 
    arguments: 
     - '@doctrine.orm.entity_manager' 

我使用EM在我的代碼庫中的一些,它的工作不錯,但的getConnection(「dbsync」)的一部分不能正常工作。
我想,我需要在__construct注入容器(?教義),但我不知道巫婆一個,我所有的測試失敗:C/

感謝更新的任何幫助

回答

0

在對陣\Doctrine\DBAL\Connection__construct類型提示和定義服務類似如下:

ent.maj_users: 
    class: EntBundle\Service\MajUsers 
    arguments: 
     - '@doctrine.dbal.dbsync_connection' 

感謝@Cerad指出我的MI股權


OLD:

您可以在文檔中找到它here

基本上,你應該這樣定義服務:

ent.maj_users: 
    class: EntBundle\Service\MajUsers 
    arguments: 
     - '@doctrine.orm.dbsync_entity_manager' 
+1

關閉,但他只需要連接,以便像'@ doctrine.dbal.dbsync_connection' – Cerad

+0

我已經嘗試這個解決方案,Xymanek,但它的兩個經理和我需要兩個連接! – lemairep

+0

您是否嘗試過@Cerad建議的操作?我看到你鍵入暗示的EntityManager,所以我認爲你需要那個服務,我的不好 – Xymanek

相關問題