我尝试在我的symfony3安装中管理2个数据库。我想要有两个连接而不是两个管理器,因为第二个数据库仅用于加载外部数据,而不是与 orm 一起使用。
我的共识
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 EntBundleService;
use DoctrineORMEntityManager;
use EntBundleEntityUserUser;
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");
.....
.....
}
}
我的服务.yml
ent.maj_users:
class: EntBundleServiceMajUsers
arguments:
- '@doctrine.orm.entity_manager'
我将 em 用于代码中的某个存储库,它工作正常,但 getConnection('dbsync') 部分不起作用。
我想我需要在__construct中注入一个容器(教义? 但我不知道女巫,我所有的测试都失败了:c/
感谢您的任何帮助
更新:
在__construct
中键入针对DoctrineDBALConnection
的提示,并按如下方式定义服务:
ent.maj_users:
class: EntBundleServiceMajUsers
arguments:
- '@doctrine.dbal.dbsync_connection'
感谢@Cerad指出我的错误
老:
您可以在文档中找到它 这里
基本上,您应该像这样定义服务:
ent.maj_users:
class: EntBundleServiceMajUsers
arguments:
- '@doctrine.orm.dbsync_entity_manager'