stofdoctrineextensionsbundle softdeleteable softdelete extensions php doctrine2

php - softdeleteable - Valores automáticos para updated_at, created_at en Doctrine



stofdoctrineextensionsbundle symfony 4 (3)

Esta es otra opción si alguna vez desea manejarlos por separado.

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"); } .......... }

Quiero que los campos updated_at y created_at en mis entidades de Doctrine se actualicen automáticamente.

En los modelos de Ruby on Rails, hay 2 campos: updated_at y created_at .

La descripción se puede encontrar aquí: http://guides.rubyonrails.org/migrations.html#migration-overview :

La macro timestamps agrega dos columnas, created_at y updated_at. Estas columnas especiales son administradas automáticamente por Active Record si existen.

¿Puedo habilitar una funcionalidad similar en Doctrine 2?


La solución más conveniente para mí es la función Timestampable de StofDoctrineExtensionsBundle .

Configuración simple y más tarde puede hacer que los campos createdAt y updatedAt of Entity updatedAt automáticamente al agregar dos annotations simples como:

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

y / o

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

p.ej

/** * @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;

Sin ningún código redundante en PHP puro.


Sí, puede hacerlo para createAt puede agregar $ this> setCreatedAt (new / DateTime ()); en el método __construct, para ambos puedes usar las devoluciones de llamadas de Life Cycle :

/** * * @ORM/PrePersist * @ORM/PreUpdate */ public function updatedTimestamps() { $this->setUpdatedAt(new /DateTime(''now'')); if ($this->getCreatedAt() == null) { $this->setCreatedAt(new /DateTime(''now'')); } }

Y no te olvides de agregar a la notación de clase de entidad:

* @ORM/HasLifecycleCallbacks