Symfony2,重构,一个或多个flush()?

时间:2014-05-27 13:31:39

标签: php symfony refactoring

我试图在我的控制器中重构我的代码。

现在,我已经在这个控制器中进行了所有治疗,并且我在行动中完成了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;
}

1 个答案:

答案 0 :(得分:1)

在您的示例中,它是一个事务,如果您想要在发生异常时恢复刷新的更改,这很好。在交易中,commit()实际上会保存您的工作,rollback()将还原更改。

在一般情况下,你应该避免过多flush(),因为它消耗了你的资源,并且会有很多不必要的数据库操作。我认为存储库主要用于查找查询而不是用于"刷新" querys。如果你想做每一次"刷新查询"在存储库中,您可能希望在您的存储库中保留这些类,并且在控制器的末尾可以刷新EntityManager