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 逻辑。
您尝试从数据库中获取实体。如果找到了,可以修改;任何持久化操作都会导致更新操作。如果找不到实体,则必须创建一个全新的实体然后持久化它;这将导致创建操作。
这个广告很简单!
我正在尝试做类似的事情(如果可能的话)
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 逻辑。 您尝试从数据库中获取实体。如果找到了,可以修改;任何持久化操作都会导致更新操作。如果找不到实体,则必须创建一个全新的实体然后持久化它;这将导致创建操作。
这个广告很简单!