Ниже рассмотрим простой, но имхо нужный пример по реализации аналога timestampable в Doctrine2.
Схема:
Vendor\MyBundle\Entity\User: type: entity table: user id: id: type: bigint generator: strategy: AUTO fields: # ... updated: type: datetime nullable: true created: type: datetime nullable: true |
Далее полагаем что сущности сгенерированы. При создании новой сущности вызывается констуктор, поэтому даты устанавливаем там:
<?php // Vendor/MyBundle/Entity/User.php class User{ // .... /** * @var datetime $created */ private $created; /** * @var datetime $updated */ private $updated; public function __construct() { $this->created = $this->updated = new \DateTime("now"); } // .... } |
Для того чтобы при обновлении сущности updated также обновлялся бы, нам надо воспользоваться lifecycle callback. Модифицируем схему и генерим по ней модель:
Vendor\MyBundle\Entity\User: type: entity table: user # ... lifecycleCallbacks: preUpdate: [ preUpdate ] |
После генерации у вас в классе сущности появится метод preUpdate, который надо слегка модифицировать:
<?php // Vendor/MyBundle/Entity/User.php class User{ // .... /** * @orm:preUpdate */ public function preUpdate() { $this->updated = new \DateTime("now"); } // .... } |
Берем и пользуемся )
Источник: http://www.doctrine-project.org/blog/doctrine2-behaviours-nutshell. Посмотрите, там еще много интересного.
Есть же специальный экстеншн для этого, который удобней.
Я этот способ в оф. доках подглядел… А что за экстеншен? )
DoctrineExtensions
http://blog.stfalcon.com/2011/04/doctrine2-behavioral-extensions/
заметки без девочек читают меньше 🙂
Еж – птица гордая 😉 Так что буду по старинке