gpt4 book ai didi

doctrine - 在 symfony2 中不同服务之间共享的 Doctrine EntityManager 实例中应该如何处理刷新?

转载 作者:行者123 更新时间:2023-12-02 18:54:39 25 4
gpt4 key购买 nike

我在 symfony 2 中定义了几个服务,它们可以保存对数据库的更改。这些服务将 Doctrine 实例作为其依赖项之一:

a.given.service:
class: Acme\TestBundle\Service\AGivenService
arguments: [@doctrine]

如果我有两个不同的服务,并且它们都通过 EntityManager 持久化对象,该对象是从 Doctrine 实例中获取的:

$em = $doctrine->getEntityManager();

所有服务是否始终共享同一个 EntityManager?如果是这样,如果我想处理单个事务中的所有更改,我应该如何处理刷新?我已经检查过:http://docs.doctrine-project.org/projects/doctrine-orm/en/2.0.x/reference/transactions-and-concurrency.html它解释了如何处理请求中的不同事务,但我想要实现的是将不同服务中的不同更改作为单个事务处理。

是否有更好的方法来处理不同服务中的多个更改?

目前我最好的选择是让前端服务负责调用其他服务并随后进行刷新。后端服务将持久化对象,但不会执行任何刷新。

最佳答案

您引用的文档正是您想要的:

$em->getConnection()->beginTransaction();
try{
$service1 = $this->get('myservice1');
$service1->doSomething();

$service2 = $this->get('myservice2');
$service2->doSomething();

$em->getConnection()->commit();
catch(\Exception $e){
$em->getConnection()->rollback();
}

如果您的 $em 与容器中的相同,即您仅使用一个实体管理器,那么您现在可以刷新服务内部并在发生错误时回滚。

关于doctrine - 在 symfony2 中不同服务之间共享的 Doctrine EntityManager 实例中应该如何处理刷新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9779423/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com