我想从默认em更改为名为“ ps”的em。配置正确,在控制器中,我可以简单地键入$this->getManager('ps')->getConnection('ps');
。
但是我想创建一个具有依赖项注入的服务,该服务也需要访问此连接。
<?php
namespace AppBundle\Service;
use Doctrine\ORM\EntityManagerInterface;
class HilaService
{
private $entityManager;
private $connection;
public function __construct(EntityManagerInterface $entityManager)
{
$this->entityManager = $entityManager;
$this->connection = $entityManager->getConnection('ps');
}
public function getCategories(){
$query = $this->connection->query(
'SQL ....'
);
$r = $query->execute();
}
}
由于我无法在任何地方选择实体管理器“ ps”,因此也无法加载连接“ ps”,这会导致错误:
SQLSTATE[42S02]: Base table or view not found: 1146 Table 'ps_xxx' doesn't exist
我可以以某种方式将参数传递给注入吗?还是注入一些“父对象”以调用->getManager()
?
答案 0 :(得分:2)
如果您的服务类只需要连接,那么最简单的方法就是创建自己的连接类并注入它。
namepace AppBundle\Connection;
class PsConnection extends Doctrine\DBAL\Connection
{
}
# doctrine.yaml
doctrine:
dbal:
connections:
ps:
wrapper_class: AppBundle\Connection\PsConnection
class HilaService
{
public function __construct(AppBundle\Connection\PsConnection $conn)
一切都会像以前一样工作,但是您可以直接获得连接。
如果您确实需要实体管理器,则可以进行服务定义:
# services.yaml
AppBundle\Service\HilaService:
$entityManager: '@doctrine.orm.ps_entity_manager'
最后,如果您不想闲逛这些东西,可以注入ManagerRegistry并从中获取所需的东西。
class HilaService
{
public function __construct(Doctrine\Common\Persistence\ManagerRegistry $managerRegistry)
{
$em = $managerRegistry->getManager('ps'); // or getConnection()