Symfony preUpdate vs prePersist

Sono nuovo di Symfony2 e vorrei sapere qual è la differenza in prePersist e preUpdate eventi. Sembra che prePersist è un ‘licenziato’ prima ‘persistere’ un record, ma quando preUpdate fuoco?

InformationsquelleAutor mentalic | 2013-01-15

 

3 Replies
  1. 24

    Nessuno di questi fa parte di Symfony in particolare. Essi sono parte di Doctrine2. Il prePersist incendi, al punto che un’entità è persistita per la prima volta. Persistenza di un oggetto significa che è gestito dalla Dottrina entityManager, anche se non effettivamente ottenere l’inserimento nel database fino a un filo.

    preUpdate è l’evento corrispondente su un oggetto esistente che è in procinto di essere aggiornato. Perché un oggetto esistente è già gestito da l’entityManager al punto che è stato richiesto, non vi è alcun equivalente persistono evento. Fondamentalmente viene generato quando un oggetto esistente è stato modificato, e un flush è stato chiamato.

    In altre parole, se non cambia nulla in oggetto, PreUpdate non funziona!

    Detto questo, si può pensare a questi come happening “appena prima di inserire” e “prima di aggiornare”.

    Ci sono 2 forme di questi: callback del ciclo di vita, che può essere annotati direttamente nell’entità e aggiunto come metodi all’interno di esso, ma hanno accesso solo per gli attributi di entità. Questi possono essere semplici manipolazioni, come la registrazione cronologica, in conformità con stringhe ad un particolare standard, o la generazione di attributi derivati.

    Ci sono anche vero ascoltatori che devono essere registrati con l’entityManager, e di avere accesso ai dati dell’evento che ha il tipo di dati che ci si aspetta da un trigger di database.

    Nota che in Dottrina versione 2.4 hanno aggiunto i Dati di evento, anche per callback del Ciclo di vita, il che rende molto più semplice e facile per fare lo stesso tipo di cose che in precedenza necessari per utilizzare i listener di eventi per l’.

  2. 15

    Vale anche la pena notare:

    Se l’entità non ha i valori modificati, il PreUpdate NON attiva.

    Così non si può fare affidamento su questo per aggiornare solo una modifica timestamp quando un modulo viene salvato. Questo è particolarmente difficile se si dispone di una collezione di form su una pagina e l’utente può avere aggiornato dei campi di form collezioni. Le entità che sono state aggiornate, attiverà il PreUpdate, ma la forma primaria di entità non innescare un PreUpdate a meno che non siano PROPRIO i campi sono stati aggiornati.

    È possibile impostare più callback del ciclo di vita annotazioni per entrambi PrePersist e PreUpdate

    Così, per esempio, se si desidera impostare la data e ora della modifica quando viene creato il record E quando viene aggiornato, è possibile aggiungere annotazioni per la stessa funzione dell’entità, ad esempio

    /**
     * @ORM\PreUpdate
     * @ORM\PrePersist
     */
    public function setTimeModValue() {
        $this->timeMod = time();
    }
    • -Se l’ente non dispone di tutti i valori modificati, il PreUpdate NON attiva. Uno dei più fastidiosi parti della Dottrina. Molte ore sprecate prima di realizzare questo. Non solo, anche oggi. 🙁 Se qualcuno di voi ha set/get funzioni per i file caricati assicurarsi di regolare gestito modificato timestamp proprietà nel file caricati la funzione set troppo.
  3. 5

    Da qui: http://docs.doctrine-project.org/en/2.0.x/reference/events.html#lifecycle-events

    prePersist – Il prePersist evento si verifica per una determinata entità prima che i rispettivi EntityManager persistono funzionamento di tale entità viene eseguito.

    preUpdate – Il preUpdate evento si verifica prima che le operazioni di aggiornamento di database di dati di entità. Non viene chiamato per un DQL istruzione UPDATE.

    Inoltre, notare che questo è per la Dottrina della fede, e non specificamente di Symfony.

Lascia un commento