我正在研究一個包含Doctrine和傳統內聯SQL混合使用的數據庫訪問的Web項目。隨着時間的推移,我們正在從後者遷移到前者。無效的Doctrine實體被創建
其中一個數據庫表(表A)有一個非正式的外鍵(即在SQL表定義中沒有實際的約束)列。此列中的值可以爲空,但有時此列中的值引用另一個表(表B)主鍵,此鍵已被刪除。
表A與表B的關係在表A的Doctrine中的實體定義中形式化。當我從表A中的現有行創建實體的實例,並且非正式外鍵列的值不再位於表B中時,那麼它似乎創建了無效的表B實體。即對象被設置,並且我可以通過我們創作的TableB-> getId()方法來查詢它的id,但是任何其他TableB-> getProperty()都會失敗並引發錯誤。
由於我已經在處理歷史數據,因此我需要一個運行時解決方案。我需要通過檢查來確定表B實體是否有效。 我可以把它放在try-catch循環中,但這不是我們代碼庫中的常見模式,並且看起來不太優雅。 是否有一個規範的方法來檢查一個Doctrine實體的有效性來解決這個問題?
謝謝
我的意見是,你正在尋找框架級別的解決方案,而實際的問題是在數據庫/模型級別。我寧願專注於創建清晰的數據模型,以更好地表現業務需求/現實,並使用數據庫工具(僅返回「有效」數據的視圖,同步數據的觸發器等)實現兼容性。然後完成並且工作可靠,丟棄舊模型並使用新模型。否則,如果系統中充滿了補丁和黑客,並且每次下一次更改都會導致越來越多的努力,那麼您最終可能會得到這樣的結果。 – a1ex07
同意,並且將是一個更長期的解決方案,但最後期限... – JonRed