我正在研究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上存在一个恢复命令?
答案 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;
.....
可能是解决问题的正确方法吗?