我试图在我的控制器中重构我的代码。
现在,我已经在这个控制器中进行了所有治疗,并且我在行动中完成了flush()
。
因此,在一项操作中,我最后可以有多个persist()
和一个flush()
。
我现在正在努力清理我的控制器,并在我的所有存储库中创建函数以减少代码。
但是现在我遇到了一个问题,如果之前的行为是10 persist()
和1 flush()
,现在我有10 flush()
(每个存储库函数一个)。
我认为增加flush()
这样的数量并不是一个好的解决方案,对吗?
我现在找到了一些东西,如果使用此代码,每次总共有10 flush()
个?或者只有一个commit()
?
$em->getConnection()->beginTransaction(); // suspend auto-commit
try {
//... do some work
$user = new User;
$user->setName('George');
$em->persist($user);
$em->flush();
$em->getConnection()->commit();
} catch (Exception $e) {
$em->getConnection()->rollback();
$em->close();
throw $e;
}
答案 0 :(得分:1)
在您的示例中,它是一个事务,如果您想要在发生异常时恢复刷新的更改,这很好。在交易中,commit()
实际上会保存您的工作,rollback()
将还原更改。
在一般情况下,你应该避免过多flush()
,因为它消耗了你的资源,并且会有很多不必要的数据库操作。我认为存储库主要用于查找查询而不是用于"刷新" querys。如果你想做每一次"刷新查询"在存储库中,您可能希望在您的存储库中保留这些类,并且在控制器的末尾可以刷新EntityManager
。