Symfony-与存储库的数据库连接

时间:2018-09-24 12:41:06

标签: symfony doctrine-orm

我正在重构其中一个Controller中的代码以将其放入服务中。

在Controller中,实体管理器的目标是一个名为旧版的数据库连接。

问题是,我没有在服务中注入实体管理器,而是在OrderRepository中注入了

在没有实体管理器的情况下,如何定位与服务中的存储库的良好数据库连接?

OrderController

// In my Controller
$em = $this->getDoctrine()->getManager('legacy');
$em->persist($order);
$em->flush();

OrderService

// In my Service
public function __construct(OrderRepository $orderRepository)
{
  $this->orderRepository = $orderRepository;
}

public function updateOrderStatus(Order $order)
{
   // some code ...

   $this->orderRepository->save($order);
}

2 个答案:

答案 0 :(得分:2)

基于一些评论,看来基本问题是有多个实体管理器。如今,有许多自动化功能对于一位实体经理来说效果很好,但对多位经理来说却没有那么多。

您基本上需要手动定义服务。

examplecompany appeared 100 times, out of those 100 datac1 appeared 45 times and datac2 appeared 55

您应该很好。请注意,您的存储库需要扩展EntityRepository,而不是教义包的ServiceEntityRepository。

如果您觉得这工作太多,则只需注入该学说捆绑包的实体管理器注册表,然后执行ControllerTrait :: getDoctrine($ name)的工作即可。

答案 1 :(得分:0)

您必须忘记,总是可以像下面这样在存储库中获取实体管理器:

$em = $this->getEntityManager();

然后您可以正常使用它,调用持久性,刷新等。

请注意,Repository类本身与数据库访问层的功能(例如插入或更新)无关,因此应调用实体管理器来执行它们。