Symfony - установить время истечения автоматически - PullRequest
0 голосов
/ 13 января 2020

Я устанавливаю новую сущность в моей форме, и у меня есть поле «Создано», которое я хочу использовать для автоматической установки срока действия. Я хочу, чтобы поле с истекшим сроком было установлено на истину через 30 минут после установки объекта.

У меня есть некоторые логи c, но я думаю, что они не будут работать.

Моя часть кода:

 $dateNow = new \DateTime();
    $entity->setCreated($dateNow)->modify("+33 Minutes");
    if($dateNow >= $entity){
        $entity->setExpired(true);
        $this->em->persist($entity);
        $this->em->flush();
    }

if($entity->isExpired()) {
        throw new /Exception('Sorry,it is expired.');
    }

У вас есть идеи, как сделать это при использовании setter в Doctrine? Спасибо

Ответы [ 2 ]

2 голосов
/ 13 января 2020

В вашем примере вы сравниваете экземпляр DateTime с вашим объектом, который, вероятно, относится к другому типу, а не к DateTime.

Чтобы выяснить, истек ли срок действия вашего объекта, просто сравните экземпляр DateTime, который установлен как созданный с новым экземпляром DateTime. Вы можете использовать метод diff (). Возможно, бесполезно хранить флаг в вашей базе данных, но я не знаю ваш вариант использования.

Это может выглядеть примерно так (untestet):

<?php
//...
function isExpired() {
    $diff = $this->createdAt->diff(new DateTime());
    return $diff->i >= 30;
}
1 голос
/ 14 января 2020

Я хотел бы исправить вышеприведенный ответ $diff->m представляет месяцы, минуты - i , поэтому правильный код будет $diff->i >= 30

...