我使用Doctrine创建了一个Symfony项目,当我在数据库中保存一个实体时,我发现它保存了两次。
我已分别使用persistAndflush()
,persist()
和flush()
,但我不明白这个问题。
答案 0 :(得分:14)
想象一下,在您的控制器中,您可以对不同的对象执行多项操作:$obj1
,$obj2
,$obj3
。
现在您需要在数据库中保存所有转换(创建,更新,删除)。要告诉ORM需要执行这些操作,您需要填充队列"通过:
$em->persist($obj1);
$em->persist($obj2);
$em->persist($obj3);
现在你的队列中有三个对象,但数据库中仍然没有变化。刷新操作告诉ORM / ODM现在应用更改"。
$em->flush();
因此,对您的三个对象应用的修改将按照保留呼叫的顺序存储在您的数据库中:$obj1
,$obj2
,$obj3
。
答案 1 :(得分:1)
换句话说,在每2次刷新之间,新的交易开始。 您可以将此与使用普通PDO connecton的事务,提交,回滚进行比较