Używam obiektów Doctrine 2. Mamy pewne podmioty, które muszą aktualizować powiązane elementy, gdy są zapisane w bazie danych. Na przykład, gdy rekord użytkownika zostanie zmodyfikowany, zapisujemy go jako nowy rekord, a pole "nieaktywne" jest ustawione na "fałsz". Musimy jednak ustawić pole "nieaktywne" dla wszystkich poprzednich rekordów dla tego użytkownika na "true". Ma to na celu utrzymanie historii audytu. Jest to baza danych Legacy, więc zmiana struktury nie jest opcją.Doctrine 2, Konieczność wykonania kodu pre-persist/post-persist
Ponieważ Doctrine zapisuje obiekty, przekazując je do obiektu trwałego (persist :: ($ thisObj)), a nie do obiektu posiadającego metodę zapisu ($thisObj->save()
), nie możemy po prostu rozszerzyć metody "zapisywania" z obiekt nadrzędny. Jedyną opcją, którą tu widzę, jest próba przedłużenia obiektu "upartego", ale brzmi to jak gęsie gęsi, tylko czekając, aby się wydarzyć.
Znalazłem trochę informacji o zdarzeniach, ale nie widzę sposobu ich dodania, aby zdarzenia wywoływały określoną funkcję, gdy dany obiekt byłby utrwalony.
Jak dodać funkcję zapisywania/zapisywania po zamknięciu do niektórych moich obiektów?
OK, zorientowali się, dlaczego czasami wydarzenia „po prostu odmówić ognia”. Zdarzenia prePersist/posPersist występują tylko podczas zapisywania nowego rekordu. Jeśli aktualizujesz istniejący rekord, preUPdate/postUpdate wyrównuje ogień. Tak więc mimo wywołania metody persist, jeśli zapisujesz istniejący obiekt, mają zastosowanie zdarzenia cyklu przed aktualizacją/postUpdate. –
Dzięki za prowadzenie we właściwym kierunku. Jedna obserwacja: dziedziczy wszystkie moje jednostki z klasy bazowej, aby nadać jej pewne ogólne cechy. Nienawidzę umieszczać zdarzenia w każdym obiekcie, ponieważ w moim przypadku po prostu używam postLoad do odpalenia konstruktora, a ja chcę to na wszystkich elementach. Jakikolwiek sposób przeniesienia tego do klasy bazowej bez konieczności wykonywania dodatkowej kopii i wklejania w obiekcie? – redreinard
Drugi punkt był dla mnie bardzo przydatny! Dziękuję Ci bardzo! –