symfony Doctrne -- Автозаполнение даты в БД -- Gedmo

С помощью аннотаций Symfony можно настроить автозаполнение даты создания и обновления объекта сущности в БД. Для этого будем использовать StofDoctrineExtensionsBundle, который имеет в своих зависимостях Gedmo (также может реализовать поведения sluggable, translatable, loggable и tree).

  1. Устанавливаем StofDoctrineExtensionsBundle.
    • Прописываем в консоли:
      composer require stof/doctrine-extensions-bundle
      composer update

      если данные в вендор не добавятся, можно удалить целиком папку vendor и запустить

      composer install
    • Добавляем в AppKernel.php:
       public function registerBundles()
          {
              $bundles = [
                  // ...
                  new Stof\DoctrineExtensionsBundle\StofDoctrineExtensionsBundle(),
              ];
          }
    • Настраиваем config.yml.
      Обратите внимание, что если у вас (как у меня) соединение с БД имеет название, вам следует изменить слово default на имя соединения, иначе будет возникать такая ошибка.
      doctrine:
          orm:
              auto_mapping: true
       
      stof_doctrine_extensions:
          orm:
              default:
                  sluggable: true
                  timestampable: true
  2. В классе сущности объявляем использование Gedmo в use-ах и добавляем аннотации нужным полям:
    <?php
    // src/AppBundle/Entity/Category.php
    
    namespace AppBundle\Entity;
    
    use DateTime;
    use Doctrine\ORM\Mapping as ORM;
    use Gedmo\Mapping\Annotation as Gedmo;
    
    /**
     * @ORM\Entity
     * 
     * @ORM\Table(name="category")
     */
    class Category 
    {
       // ...
        
        /**
         * @var DateTime
         *
         * @Gedmo\Timestampable(on="create")
         * 
         * @ORM\Column(name="created_at", type="datetime")
         */
        protected $createdAt;
        
        /**
         * @var DateTime
         *
         * @Gedmo\Timestampable(on="update")
         * 
         * @ORM\Column(name="updated_at", type="datetime")
         */
        protected $updatedAt;
    }

Всё

Теперь при создании объектов Category дата будет записываться автоматически без использования методов setCreatedAt() и setUpdatedAt().

Источники

https://habrahabr.ru/post/134258/
https://symfony.com/doc/master/bundles/S...