如何在学说中的正确时间在db上持久化对象

时间:2013-12-13 13:24:34

标签: php symfony doctrine-orm doctrine

我正在研究symofony2教条项目。

实际上,如果在编辑过程中出现一些错误,我会遇到持久对象的问题。

我以“传统方式”从数据库中获取现有的obj:

 $event=$this->getDoctrine()->getManager()
        ->getRepository('LapoCalendarBundle:Event')->find($id);

然后我尝试使用一些可以使用以下命令终止的条件操作来编辑它:

$event->setDescription($description);

这些操作是有条件的并且逐个执行,所以如果例如下一个设置操作之前的第二个控件由于某种原因失败,那么之前设置的$description字段无论如何都已经在db上完成,在任何明确的调用之前的:

$em = $this->getDoctrine()->getManager();
               $em->persist($event);
               $em->flush();

所以我的问题是:有一种方法可以编辑obj并在我们预期的时候坚持它吗?或者在symofny2或doctrine / orm上存在一个恢复命令?

2 个答案:

答案 0 :(得分:0)

$em->refresh($event);

将实体对象重置/恢复为原始值。

答案 1 :(得分:0)

我再次仔细阅读了symofny2和doctrine指南,以及我之前可能缺少的是对象如何被处理...

但是在最佳实践或其他部分我没有找到一些基本问题的答案:

- 如果我有一个调用C和D的方法A,并且我有不同的“setSomething()”操作,我将调用flush方法吗? - 在每种方法中 - 就在主A的末尾

如果Persist($ obj)只是因为新的istance永远不会持续存在,那么在预先存在的对象上调用它是一个错误吗? 例如,如果我有一个方法可以生成一个新的$ obj或者提高一个旧的(取决于某些条件)但是我可以做同样的操作......

例如:

if(a) { $event=oldboj;} else $event= new Obj();
.....DOING SOMETHING ON $event->setAAAA('ooo');
.......
some error-->$em->refresh($event); return error; else go ahead....
......
em->persist($event);
em->flush;
.....

可能是解决问题的正确方法吗?