我試圖清理一個實體(即關係術語中的一個表)的集合,那些實體是Color
的實例,我想運行一個使用Doctrine 2刪除所有未提及的Color
's。問題是Color
被系統中的許多其他實體引用。所以我能想到的兩種選擇:檢查與Doctrine 2的完整性約束違規
- 遍歷所有的顏色和我的系統上存在的其他實體特定
Color
引用手動檢查每一個,並且,如果沒有參照物,將其刪除。 - 迭代所有顏色並嘗試刪除一個顏色,如果存在對該顏色的引用,則捕獲EM由完整性約束違反引起的異常,所以我忽略失敗的顏色並繼續下一個。
很明顯,第二種選擇比第一種選擇更簡單,所以我試過了。我遇到的問題是,當一個實體刪除失敗時,EM引發異常,但也關閉了實體管理器,我不能再使用它來刪除剩餘的顏色!
我檢查commit
方法UnitOfWork
類的學說2,事實上...
try {
... //Execute queries
$conn->commit();
} catch (Exception $e) {
$this->em->close();
$conn->rollback();
throw $e;
}
有什麼辦法來完成我想要做的(也許重啓實體管理器)?
你相信有更好的辦法嗎?
爲什麼學說有這種行爲?
同時請注意,我使用學說2 Symfony的2
感謝您的解決方案,我真的不應該使用級聯刪除或'orphanRemoval',因爲我不想真的要刪除所有的孤兒顏色。我想我應該在之前提到它,但是爲了數據庫清理目的,任務只執行一次,因此,我要弄清楚第三種解決方案,或許我鬆散的DBMS可移植性,幸運的是DBMS需求已經定義好了! :) – eagleoneraptor
啊是的...在這種情況下** 2)**最適合你... :) –