Задать вопрос
Ответы пользователя по тегу Doctrine ORM
  • Doctrine, как задать значение даты по умолчанию?

    @dimuska139
    Backend developer
    Тебе надо создать кастомный тип как-то вот так:
    <?php
    namespace MyProject\Types;
    use Doctrine\DBAL\Types\Type;
    use Doctrine\DBAL\Platforms\AbstractPlatform;
    
    
    class DefaultNow extends Type
    {
        const DEFAULTNOW = 'defaultnow'; // modify to match your type name
    
        public function getSQLDeclaration(array $fieldDeclaration, AbstractPlatform $platform)
        {
            // return the SQL used to create your column type. To create a portable column type, use the $platform.
        }
    
        public function convertToPHPValue($value, AbstractPlatform $platform)
        {
            $dt = new \DateTime($value);
            $dt->setTimezone(new \DateTimeZone('UTC'));
            return $dt->format('Y-m-d H:i:s');
        }
    
        public function convertToDatabaseValue($value, AbstractPlatform $platform)
        {
            if ($value == null)
                return 'now()';
            return $value;
            // This is executed when the value is written to the database. Make your conversions here, optionally using the $platform.
        }
    
        public function getName()
        {
            return self::DEFAULTNOW; // modify to match your constant name
        }
    }


    Затем тебе этот тип надо подключить к Доктрине:

    if (!Type::hasType(DefaultNow::DEFAULTNOW)) {
         Type::addType(DefaultNow::DEFAULTNOW, DefaultNow::class);
    }


    Ну и в аннотациях столбца в entity указать:
    /**
         * @var \DateTime|null
         *
         * @ORM\Column(name="created_at", type="defaultnow")
         */
        private $createdAt;
    Ответ написан
    Комментировать