Допустимый запрос:
$from = new \DateTime('-14 days');
$to = (new \DateTime())->setTime(23, 59, 59);
$qb = $this->createQueryBuilder('c')
$qb->andWhere('c.createdDate BETWEEN :from AND :to')
->setParameter('from', $from)
->setParameter('to', $to);
$result = $qb->getQuery()->getResult();
Причина, по которой он не работает для вас, заключается в том, что \DateTime
является изменяемым типом.Изменяя копию, вы также изменили предыдущий объект даты:
$from = new \DateTime();
// below you mutate the $from object, then return its instance
$to = $from->sub(new \DateInterval('P10D'));
// effect is both $from and $to reference the same object in memory
var_dump(spl_object_hash($from) === spl_object_hash($to));
echo $from->format('Y-m-d') , '<br>';
echo $to->format('Y-m-d');
В результате:
bool(true)
2018-12-07
2018-12-07
Вы сопоставили свойство createdDate
как datetime
в Doctrine.Лично я всегда использую тип datetime_immutable
.Вместо DateTime я работаю с DateTimeImmutable , который по сравнению с DateTime является неизменяемым, поэтому мне не нужно беспокоиться о каких-либо ссылках:
$from = new \DateTimeImmutable();
$to = $from->sub(new \DateInterval('P10D'));
var_dump(spl_object_hash($from) === spl_object_hash($to));
echo $from->format('Y-m-d') , '<br>';
echo $to->format('Y-m-d');
Результат:1019 *
bool(false)
2018-12-17
2018-12-07