Sto usando le entità Doctrine 2. Abbiamo alcune entità che devono aggiornare gli elementi correlati quando vengono salvati nel database. Ad esempio, quando un record utente viene modificato, lo salviamo come nuovo record, con il campo "inattivo" impostato su "falso". Tuttavia, dobbiamo impostare il campo 'inattivo' per tutti i record precedenti per quell'utente su 'true'. Questo è fatto per mantenere una cronologia di controllo. È un database Legacy, quindi cambiare la struttura non è un'opzione.Doctrine 2, Necessario eseguire codice pre-persist/post-persist
Dal momento che Doctrine salva gli oggetti passandoli su un oggetto persistente (persist :: ($ thisObj)), piuttosto che l'oggetto con un metodo di salvataggio ($thisObj->save()
), non possiamo semplicemente estendere un metodo 'salva' da un oggetto genitore. L'unica opzione che vedo qui è cercare di estendere l'oggetto "persist", ma suona come un goose gaggle, che aspetta solo di succedere.
Ho trovato alcune informazioni sugli eventi, ma non vedo come aggiungerli per far sì che gli eventi attivino una funzione particolare quando una particolare entità viene mantenuta.
Come aggiungere funzionalità pre-salvataggio/post-salvataggio ad alcune delle mie entità?
OK, capito il motivo per cui a volte gli eventi "semplicemente si rifiutano di sparare". Gli eventi prePersist/posPersist si verificano solo quando si salva un nuovo record. Se si sta aggiornando un record esistente, si attiva invece il comando preUPdate/postUpdate. Pertanto, anche se si chiama il metodo persist, se si sta salvando un oggetto esistente, si applicano gli eventi del ciclo di vita preUpdate/postUpdate. –
Grazie per avermi guidato nella giusta direzione. Un follow-up: eredito tutte le mie entità da una classe base per dargli alcune caratteristiche generali. Odio dover mettere un evento in ogni entità, perché nel mio caso uso davvero postLoad per attivare il costruttore, e voglio questo su tutte le entità. Un modo per spostare questo nella classe base senza dover fare molto copia e incolla in più nell'entità? – redreinard
Il secondo punto è stato molto utile per me! Grazie mille! –