我正在尝试清理实体集合(即关系术语中的表),这些实体是 的实例Color
,并且我想运行一个使用 Doctrine 2 删除所有未引用的脚本的脚本Color
。问题是Color
系统中的许多其他实体都引用了它。所以,我可以想到两个选择:
- 遍历所有颜色并手动检查每种颜色是否存在
Color
对我系统上其他实体上的特定的引用,如果没有引用,则将其删除。 - 遍历所有颜色并尝试删除一个,如果有对该颜色的引用,则捕获由违反完整性约束引起的 EM 引发的异常,因此,我确实忽略了失败的颜色并继续下一步。
显然,第二种选择比第一种更简单,所以我试过了。我遇到的问题是,当实体删除失败时,EM 会抛出异常,但也会关闭实体管理器,我不能再使用它来删除剩余的颜色!
我检查了教义 2commit
的课程方法UnitOfWork
,实际上......
try {
... //Execute queries
$conn->commit();
} catch (Exception $e) {
$this->em->close();
$conn->rollback();
throw $e;
}
有什么方法可以完成我正在尝试做的事情(也许重新打开实体管理器)?
你相信有更好的方法吗?
为什么教义有这种行为?
另请注意,我将 Doctrine 2 与 Symfony 2 一起使用