2017-01-23 49 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