25

我正在尝试进行INSERT OR UPDATE IF EXISTS一项交易。

mysql中,我通常会使用DUPLICATE KEY("UPDATE ON DUPLICATE KEY"。) 我知道使用各种 SQL 变体和子查询来解决这个问题的许多解决方案,但我正试图在 Doctrine (PHP ORM) 中实现这一点。似乎有 Doctrine 方法可以做到这一点,因为它的功能如此丰富,但我没有找到任何东西。出于某种原因,使用 PHP ORM 包会出现这种问题吗?或者是否有任何 Doctrine 专家知道如何通过黑客或任何方式实现这一目标?

4

4 回答 4

7

根据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();
于 2017-10-11T13:34:46.220 回答
6

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

if(!$entity = Doctrine::getTable('Foo')->find(/*[insert id]*/))
{
   $entity = new Foo();
}
/*do logic here*/
$entity->save();
于 2009-10-20T08:45:14.677 回答
3

教义支持REPLACE INTO使用该replace()方法。这应该与ON DUPLICATE KEY UPDATE您正在寻找的完全一样。

文档:替换记录

于 2009-07-15T17:22:24.610 回答
0

我认为最好的方法是调用 entityManager->merge($entity); 因为如果存在文档中承诺的操作,这是最接近更新的事情:https ://www.doctrine-project.org/projects/doctrine-orm/en/2.6/reference/working-with-objects.html

于 2018-11-18T14:37:07.840 回答