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

Symfony2 (doctrine2) : How to create universal method updateOrCreate?

我正在尝试做类似的事情(如果可能的话)

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();

}

有什么想法吗?

更新:如果找到实体,那么我需要更新他,否则我需要创建新实体。

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

我想这就是你所需要的。

但是,如果此时您还不知道您的实体是否已经持久化,那么您肯定违反了代码中的单一责任原则。

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

这个广告很简单!