我正在重构代码库,因为这是带有大量原始sql的遗留代码,而整个都是意大利面条代码。
可悲的是,该学说没有REPLACE INTO
功能,我知道原因。
我找到了一些解决方法,例如merge
,但已弃用。
我花了很多时间来学习教义,因为它被广泛使用的ORM,而我在建立实体时花费了很多时间。
是否有任何“合法”解决方案来实现此REPLACE INTO
?
答案 0 :(得分:0)
您可以通过捕获UniqueConstraintViolationException
来处理重复项。
$entity = new PossibleDuplicatedEntity();
try {
$em->persist($entity);
$em->flush();
}
catch (\Doctrine\DBAL\Exception\UniqueConstraintViolationException $e) {
// handle duplicated values
}
但是要注意–教义使用隐式事务。引发异常时,将回滚事务并关闭EntityManager
(实体已分离)。 See documentation。
更好地处理重复发生的原因。即如果是由于并发,请尝试使用表锁定等。