使用Doctrine2 EntityManager保持“REPLACE”类型

时间:2014-01-07 13:24:29

标签: php doctrine-orm entitymanager

我有一个实体,如果它不存在我需要坚持,如果它存在则更新/替换。

我不想使用->findBy()进行查找并执行更新或新操作。

使用Doctrine1,您只需创建一个新实体,然后使用方法->replace();代替->save();。我有点需要使用EntityManager为Doctrine2做这个行为。

<?php
$user = new User;
$user->setName('Mr.Right');
$em->persist($user);
$em->flush();

来自http://docs.doctrine-project.org/en/latest/reference/working-with-objects.html#persisting-entities

  

如果X是预先存在的托管实体,则persist会忽略它   操作

我需要替换/更新预先存在的托管实体,而不是忽略, 有人知道吗?

1 个答案:

答案 0 :(得分:2)

如果不执行原始查询,我不确定是否可行。但是你为什么不想先查一下呢?我会使用以下内容:

$user = $em->find('User', $id);
if (!$user) {
    $user = new User;
    $em->persist($user);
}
$user->setName('Mr.Right');
$em->flush();