Symfony 3在服务中使用第二个数据库

时间:2017-01-23 14:39:16

标签: doctrine-orm symfony

我尝试在symfony3安装中管理2个数据库。 我希望两个连接而不是两个管理器,因为第二个数据库仅用于加载外部数据而不用于orm。

我的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

在Controller中,我可以使用我的第二个数据库进行sql select:

...->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(&#39; dbsync&#39;)部分不起作用。
我想我需要在__construct中注入一个容器(doctrine?)但是我不知道一个,我的测试都失败了:c /

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

<强>更新:

在针对__construct的{​​{1}}类型提示中,定义如下服务:

\Doctrine\DBAL\Connection

感谢@Cerad指出我的错误

<强> OLD:

您可以在文档here

中找到它

基本上,你应该像这样定义服务:

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