我使用的是Doctrine 2實體。我們有一些實體在將其保存到數據庫時必須更新相關項目。例如,當用戶記錄被修改時,我們將其保存爲新記錄,並將「非活動」字段設置爲「假」。但是,我們必須將該用戶的所有先前記錄的「非活動」字段設置爲「真」。這樣做是爲了保留審計歷史。這是一個傳統數據庫,所以更改結構不是一個選項。由於Doctrine通過將對象傳遞給persist對象(persist ::($ thisObj))來保存對象,而不是具有保存方法的對象($thisObj->save()
),所以我們不能只從一個保存方法父對象。我在這裏看到的唯一選擇是試圖擴展'堅持'的對象,但這聽起來像一隻鵝羣,只是等待發生。學說2,需要執行代碼前持久性/後持久性
我發現了一些有關事件的信息,但沒有看到如何添加它們以使事件在特定實體持續存在時觸發特定函數。
如何向我的某些實體添加預保存/保存後功能?
OK,想通了,爲什麼事件有時「乾脆拒絕解僱」。 prePersist/posPersist事件僅在保存新記錄時纔會發生。如果您正在更新現有記錄,則preUPdate/postUpdate會消失。因此,即使調用持久化方法,如果要保存現有對象,也應用preUpdate/postUpdate生命週期事件。 –
感謝您帶領我走向正確的方向。一個後續行動:我從基礎類中獲取所有實體,以提供一些常規功能。我討厭必須在每個實體中放置一個事件,因爲在我的情況下,我真的只是使用postLoad來激發構造函數,並且我希望在所有實體中都這樣做。有什麼辦法可以將它移到基類中,而無需在entitiy中進行額外的複製和粘貼? – redreinard
第二點對我來說非常有用!非常感謝你! –