我尝试在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 /
感谢您的帮助
答案 0 :(得分:0)
<强>更新:强>
在针对__construct
的{{1}}类型提示中,定义如下服务:
\Doctrine\DBAL\Connection
感谢@Cerad指出我的错误
<强> OLD:强>
您可以在文档here
中找到它基本上,你应该像这样定义服务:
ent.maj_users:
class: EntBundle\Service\MajUsers
arguments:
- '@doctrine.dbal.dbsync_connection'