如何在doctrine2中实现RETOACE INTO

时间:2019-06-05 13:26:32

标签: doctrine-orm doctrine

我正在重构代码库,因为这是带有大量原始sql的遗留代码,而整个都是意大利面条代码。

可悲的是,该学说没有REPLACE INTO功能,我知道原因。

我找到了一些解决方法,例如merge,但已弃用。

我花了很多时间来学习教义,因为它被广泛使用的ORM,而我在建立实体时花费了很多时间。

是否有任何“合法”解决方案来实现此REPLACE INTO

1 个答案:

答案 0 :(得分:0)

您可以通过捕获UniqueConstraintViolationException来处理重复项。

$entity = new PossibleDuplicatedEntity();

try {
   $em->persist($entity);
   $em->flush();
}
catch (\Doctrine\DBAL\Exception\UniqueConstraintViolationException $e) {
    // handle duplicated values
}

但是要注意–教义使用隐式事务。引发异常时,将回滚事务并关闭EntityManager(实体已分离)。 See documentation

更好地处理重复发生的原因。即如果是由于并发,请尝试使用表锁定等。