Automatyczne uzupełnianie created_at z Doctrine2

Przy wielu danych w bazie przydaje się data pierwszego dodania rekordu. Z Symfony2, a w sumie raczej dzięki Doctrine2 zautomatyzowanie tego procesu jest bardzo łatwe.

W przykładzie użyję anotacji jako opcji definiowania metadanych. Cała operacja polega na 2 krokach:

  1. Poinformowanie Doctrine o tym, że ma szukać i obsługiwać  lifecycle callbacks
  2. /**
     * @ORM\Entity()
     * @ORM\HasLifecycleCallbacks()
     */
    class Product
    {
        // ...
    }
  3. Dodanie anotacji informującej o wykonaniu podczas wybranego etapu.
  4. /**
     * @ORM\prePersist
     */ 
    public function setCreatedAtValue()
    {
        $this->created_at = new \DateTime();
    }

To wszystko – Doctrine2 automatycznie doda aktualna datę do rekordu podczas jego tworzenia.

Poza prePersist Doctrine2 obsługuje jeszcze inne etapy życia obiektu:

  • preRemove
  • postRemove
  • postPersist
  • preUpdate
  • postUpdate
  • postLoad
  • loadClassMetadata

 

  1. A behavior Timestampable, czy coś w tym stylu [aktualizowało pola created_at i updated_at] nie ma? Ja akurat korzystałem z tamtego sposobu. ;]

  2. Nie wiem dlaczego, ale miałem Semantical Error.
    Pomogła zmiana:
    @ORM\prePersist
    na
    @ORM\PrePersist

Zostaw komentarz


Podpowiedź - możesz użyć tych HTML tagów i atrybutów:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>