我试图INSERT OR UPDATE IF EXISTS
在一个事务中。
在MySQL中,我一般会使用DUPLICATE KEY
(“UPDATE ON重复密钥。”)我知道很多的解决方案,利用各种SQL的变体和子查询这个问题,但我想实现这个教义(PHP ORM )。 这似乎也将是因为它是如此功能丰富的做这个学说的方法,但我没有找到任何东西。 这算哪门子的事用PHP ORM包出于某种原因出了问题? 或做任何道理的专家知道如何通过黑客或任何手段来实现这一目标?
我试图INSERT OR UPDATE IF EXISTS
在一个事务中。
在MySQL中,我一般会使用DUPLICATE KEY
(“UPDATE ON重复密钥。”)我知道很多的解决方案,利用各种SQL的变体和子查询这个问题,但我想实现这个教义(PHP ORM )。 这似乎也将是因为它是如此功能丰富的做这个学说的方法,但我没有找到任何东西。 这算哪门子的事用PHP ORM包出于某种原因出了问题? 或做任何道理的专家知道如何通过黑客或任何手段来实现这一目标?
我能想到的唯一的事情就是先查询实体,如果它存在,否则创建新的实体。
if(!$entity = Doctrine::getTable('Foo')->find(/*[insert id]*/))
{
$entity = new Foo();
}
/*do logic here*/
$entity->save();
教义支持REPLACE INTO
使用replace()
方法。 这应该工作完全一样, ON DUPLICATE KEY UPDATE
你要找的人。
文档: 更换记录
根据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();
我认为最好的办法是打电话entityManager->合并($实体); 因为它是否存在操作更新最接近的承诺在文档: https://www.doctrine-project.org/projects/doctrine-orm/en/2.6/reference/working-with-objects.html