Лучшие практики с текущей датой в доктрине / php - PullRequest
0 голосов
/ 23 января 2019

Мне пришлось извлекать данные с помощью доктрины, основанной на текущей дате , я хотел знать, что было лучшим в этом отношении.Должен ли я:

  • передать объект DateTime, представляющий текущее время в качестве параметра моей функции, чтобы я мог легко протестировать свою функцию
  • Создание объекта DateTime в setParameter () моего QueryBuilder
  • Или просто используйте CURRENT_TIMESTAMP () mysql в моем построителе запросов

Я немного растерялся с этими вариантами и почему я должен или не должен выбирать вариант.

1 Ответ

0 голосов
/ 23 января 2019

Если вы используете Doctrine, то последний вариант по определению не должен использоваться, так как Doctrine обладает функциональностью для создания запросов.Поэтому либо передайте объект DateTime в качестве параметра, например, в функцию репозитория, и / или используйте создание экземпляра нового объекта DateTime, когда вы используете QueryBuilder.

В качестве параметра для функции, например, в репозитории:

function getStuff(DateTime $from)
{ 
    $criteria = new Criteria();
    $criteria->andWhere(
        $criteria::expr()->eq('from', $from)
    );

    return $this->matching($criteria);
}

Или, если вы всегда хотите использовать «сейчас»:

function getStuff()
{ 
    $criteria = new Criteria();
    $criteria->andWhere(
        $criteria::expr()->eq('from', new DateTime('now'))
    );

    return $this->matching($criteria);
}

Почемув качестве параметра

Возможно, вы захотите разрешить пользователю устанавливать дату (и / или время) и, таким образом, передавать его из контроллера и / или службы

* 1014.* Почему «сейчас»

Возможно, вы захотите всегда возвращать что-то из / до настоящего момента.


Mind, вместо 'now' вы можете использовать другой относительный формат для установки значения по умолчанию DateTime, например:

$dateTime = new DateTime('last day of'); // Sets date to last day of the current month

Подробнее об использовании Doctrine Criteria

Иполный класс документов

...