我有一个实体,如果它不存在我需要坚持,如果它存在则更新/替换。
我不想使用->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会忽略它 操作
我需要替换/更新预先存在的托管实体,而不是忽略, 有人知道吗?
答案 0 :(得分:2)
如果不执行原始查询,我不确定是否可行。但是你为什么不想先查一下呢?我会使用以下内容:
$user = $em->find('User', $id);
if (!$user) {
$user = new User;
$em->persist($user);
}
$user->setName('Mr.Right');
$em->flush();