Frage Automatische Werte für updated_at, created_at in Doctrine


Ich möchte Felder machen updated_at und created_at in meinem Doktrin-Entitäten um automatisch zu aktualisieren.

In Ruby on Rails-Modellen gibt es 2 Felder: updated_at und created_at.

Beschreibung finden Sie hier: http://guides.rubyonrails.org/migrations.html#migration-overview:

Das Timestamps-Makro fügt zwei Spalten hinzu, created_at und updated_at. Diese speziellen Spalten werden automatisch von Active Record verwaltet, wenn sie existieren.

Kann ich ähnliche Funktionen in Doctrine 2 aktivieren?


34
2018-06-26 13:47


Ursprung


Antworten:


Ja, Sie können für createdAt Sie $ this hinzufügen> setCreatedAt (new \ DateTime ()); in __construct-Methode, für beide können Sie verwenden Lebenszyklus Rückrufe :

 /**
 *
 * @ORM\PrePersist
 * @ORM\PreUpdate
 */
public function updatedTimestamps()
{
    $this->setUpdatedAt(new \DateTime('now'));

    if ($this->getCreatedAt() == null) {
        $this->setCreatedAt(new \DateTime('now'));
    }
}

Und vergessen Sie nicht, die Entity-Class-Notation hinzuzufügen:

 * @ORM\HasLifecycleCallbacks

82
2018-06-26 15:04



Dies ist eine weitere Option, wenn Sie diese separat behandeln möchten.

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity
 * @ORM\Table(name="person")
 * @ORM\HasLifecycleCallbacks
 */
class Person
{
    ..........

    /**
     * @var datetime $created
     *
     * @ORM\Column(type="datetime")
     */
    protected $created;

    /**
     * @var datetime $updated
     * 
     * @ORM\Column(type="datetime", nullable = true)
     */
    protected $updated;


    /**
     * Gets triggered only on insert

     * @ORM\PrePersist
     */
    public function onPrePersist()
    {
        $this->created = new \DateTime("now");
    }

    /**
     * Gets triggered every time on update

     * @ORM\PreUpdate
     */
    public function onPreUpdate()
    {
        $this->updated = new \DateTime("now");
    }

    ..........
}

39
2018-04-21 10:53



Die bequemste Lösung für mich ist Timestampable Merkmal von StofDoctrineExtensionsBundle.

Einfache Konfiguration und später können Sie Felder erstellen createdAt und updatedAt von Entity automatisch durch Hinzufügen von zwei einfachen ausgefüllt annotations mögen:

@Gedmo\Mapping\Annotation\Timestampable(on="create")

und / oder

@Gedmo\Mapping\Annotation\Timestampable(on="update")

z.B.

/**
 * @var \DateTime
 * @Gedmo\Mapping\Annotation\Timestampable(on="create")
 * @Doctrine\ORM\Mapping\Column(type="datetime")
 */
protected $createdAt;

/**
 * @var \DateTime
 * @Gedmo\Mapping\Annotation\Timestampable(on="update")
 * @Doctrine\ORM\Mapping\Column(type="datetime")
 */
protected $updatedAt;

Ohne redundanten Code in reinem PHP.


1
2018-05-10 18:50