Symfony2(doctrine2):如何创建通用方法updateOrCreate?

时间:2015-02-16 11:21:29

标签: symfony doctrine-orm

我试图做某些事情(如果可能的话)

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:如果发现了实体,那么我需要更新他,否则我需要创建新的实体。

2 个答案:

答案 0 :(得分:1)

if(null==$obj->getId()) {
    $em->persist($obj);
}
$em->flush();

我认为你需要的只是。

但是,如果您现在还不知道您的实体是否已被保留,那么您肯定违反了代码中的单一责任原则。

答案 1 :(得分:1)

您不需要逻辑,学说会为您处理更新/插入逻辑。 您尝试从DB获取实体。如果找到了,你可以修改它;任何持久操作都将导致更新操作。如果找不到实体,你必须创建一个全新的实体,然后坚持它;这将导致创建操作。

轻松做广告!