有没有一种方法可以避免针对不同实体的对象进行Doctrine嵌套事务?

时间:2018-06-22 12:48:12

标签: symfony doctrine symfony3.x

我正在使用Symfony 3.4.x和MariaDB。

在将更改持久保存在(实体A)对象之前,我需要检查(并根据需要更新)0-n个其他对象(实体B和C的对象),并将整个更改集保存在单个事务中。这三个实体处于同一数据库连接中。

如果我必须对实体B的对象进行更改,则会发生相同的机制。

这些对象不在实体A对象的ArrayCollection中。我需要调用相应存储库的方法来获取它们。

如果我是一个好习惯吗?

  1. 在控制器中启动事务
  2. 坚持对象(实体A)
  3. 调用(将要编写的)服务方法,该方法可以接收entityA或entityB的对象,并传递EntityManager对象的引用
  4. 服务中,启动子事务,检查并进行所有必要的更改,然后提交子事务。
  5. 回到控制器中,调用主事务的commit();

Doctrine似乎建议尽量避免嵌套事务(http://doctrine-orm.readthedocs.io/projects/doctrine-dbal/en/latest/reference/transactions.html#transaction-nesting)。

在这种情况下,是否有另一种方法可以安全地进行我的更改而不使用嵌套事务?

在此先感谢您的建议! :-)

0 个答案:

没有答案