在学说ORM“如果存在更新”实施(implementing “update if exists” i

2019-06-26 01:23发布

我试图INSERT OR UPDATE IF EXISTS在一个事务中。

MySQL中,我一般会使用DUPLICATE KEY (“UPDATE ON重复密钥。”)我知道很多的解决方案,利用各种SQL的变体和子查询这个问题,但我想实现这个教义(PHP ORM )。 这似乎也将是因为它是如此功能丰富的做这个学说的方法,但我没有找到任何东西。 这算哪门子的事用PHP ORM包出于某种原因出了问题? 或做任何道理的专家知道如何通过黑客或任何手段来实现这一目标?

Answer 1:

我能想到的唯一的事情就是先查询实体,如果它存在,否则创建新的实体。

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


Answer 2:

教义支持REPLACE INTO使用replace()方法。 这应该工作完全一样, ON DUPLICATE KEY UPDATE你要找的人。

文档: 更换记录



Answer 3:

根据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();


Answer 4:

我认为最好的办法是打电话entityManager->合并($实体); 因为它是否存在操作更新最接近的承诺在文档: https://www.doctrine-project.org/projects/doctrine-orm/en/2.6/reference/working-with-objects.html



文章来源: implementing “update if exists” in Doctrine ORM