在 Doctrine ORM 中实现“如果存在,则更新”

2022-08-30 17:16:01

我正在尝试在一次交易中。INSERT OR UPDATE IF EXISTS

mysql中,我通常会使用(“在重复密钥上更新”)。我知道使用各种SQL变体和子查询来解决这个问题的许多解决方案,但我试图在学说(PHP ORM)中实现这一点。似乎会有 Doctrine 方法来做到这一点,因为它是如此强大的功能,但我没有找到任何东西。出于某种原因,这种事情是使用PHP ORM软件包的问题吗?或者任何教义专家知道如何通过黑客或任何手段实现这一目标?DUPLICATE KEY


答案 1

根据 https://www.vivait.co.uk/labs/updating-entities-when-an-insert-has-a-duplicate-key-in-doctrine 这可以通过.$entityManager->merge()

$entity = new Table();
$entity->setId(1);
$entity->setValue('TEST');

$entityManager->merge($entity);
$entityManager->flush();

答案 2

我唯一能想到的是首先查询实体(如果存在),否则会创建新实体。

if(!$entity = Doctrine::getTable('Foo')->find(/*[insert id]*/))
{
   $entity = new Foo();
}
/*do logic here*/
$entity->save();

推荐