Найти все записи с сегодняшнего дня до следующего или за последние 30 дней

Я на ZendFramework2 и использую доктрину 2.

Я хочу найти все записи от сегодняшнего DateTime до следующих или последних 30 дней, связанных со сделкой.

Вот мой запрос доктрины и код,

$emailRepo = $em->getRepository('App\Entity\Email')->findBy(['deal' => $deal]);
foreach ($emailRepo as $email) {
            $sendAt = $email->getSendAt();
        }

У меня есть объект DateTime в переменной sendAt,

По некоторым ссылкам я нашел эту функцию strtotime.

$data = date('Y-m-d h:i:s', strtotime("+30 days"));
$data = date('Y-m-d h:i:s', strtotime("-30 days"));

Но это не сработало для меня.

Как правильно это написать?


person Keyur    schedule 25.05.2016    source источник
comment
Спасибо за комментарий, я хочу найти записи между двумя датами. Я думаю, что это, вероятно, даст мне только дату 30 дней с даты базы данных. @ всплеск58.   -  person Keyur    schedule 25.05.2016


Ответы (1)


После небольшого поиска у меня сработал Конструктор запросов.

В течение следующих 30 дней

$date = date('Y-m-d h:i:s', strtotime("+30 days"))

$sendAt = $em->getRepository('App\Entity\Email')
            ->createQueryBuilder('e')
            ->select('e')
            ->where('e.sendAt BETWEEN :today AND :n30days')
            ->setParameter('today', date('Y-m-d h:i:s'))
            ->setParameter('n30days', $date)
            ->getQuery()
            ->getArrayResult();

За последние 30 дней

$date = date('Y-m-d h:i:s', strtotime("-30 days"))

$sendAt = $em->getRepository('App\Entity\Email')
            ->createQueryBuilder('e')
            ->select('e')
            ->where('e.sendAt BETWEEN :n30days AND :today')
            ->setParameter('today', date('Y-m-d h:i:s'))
            ->setParameter('n30days', $date)
            ->getQuery()
            ->getArrayResult();
person Keyur    schedule 25.05.2016