我试图做某些事情(如果可能的话)
function updateOrCreate($obj,$findOneBy) {
// not sure if it will work
$repo = $this->getDoctrine()->getRepository(get_class($obj));
if ($object = $repo->findOneBy($findOneBy)) {
// how to replace $object by $obj and persist it?
} else {
$em->persist($obj);
}
$em->flush();
}
有什么想法吗?
upd:如果发现了实体,那么我需要更新他,否则我需要创建新的实体。
答案 0 :(得分:1)
if(null==$obj->getId()) {
$em->persist($obj);
}
$em->flush();
我认为你需要的只是。
但是,如果您现在还不知道您的实体是否已被保留,那么您肯定违反了代码中的单一责任原则。
答案 1 :(得分:1)
您不需要逻辑,学说会为您处理更新/插入逻辑。 您尝试从DB获取实体。如果找到了,你可以修改它;任何持久操作都将导致更新操作。如果找不到实体,你必须创建一个全新的实体,然后坚持它;这将导致创建操作。
轻松做广告!