Ответ 1
Есть и другой способ:
$query = $em->createQuery('SELECT d FROM test d WHERE d.expDate > :today')
->setParameter('today', new \DateTime())->
У меня есть база данных, где хранится "дата истечения срока действия". Теперь я хочу, чтобы текущая дата была сопоставлена с сохраненной датой истечения срока действия. Если текущая дата предшествует дате истечения срока действия, данные должны отображаться как обычно, но если данные истекли, я хочу, чтобы они были исключены.
Я пробовал:
$query = $em->createQuery('SELECT d FROM test d WHERE d.expDate > :date')
->setParameters('date', 'now()');
Помощь будет классной, или некоторые подсказки, если кто-то поймет мою проблему.
Есть и другой способ:
$query = $em->createQuery('SELECT d FROM test d WHERE d.expDate > :today')
->setParameter('today', new \DateTime())->
Прямо сейчас, вы сравниваете столбец expDate
с текстом "now()", а не с результатом функции now()
.
$em->createQuery('SELECT d FROM test d WHERE d.expDate > CURRENT_DATE()');
Вы можете использовать функцию date
для создания сравниваемой строки:
$query = $em->createQuery('SELECT d FROM test d');
$query->addWhere("d.exp_date > ?",date("Y-m-d", time()));
Собственно, ваш способ работает, но у вас небольшая ошибка в вашем коде.
Вы используете:
$query = $em->createQuery('SELECT d FROM test d WHERE d.expDate > :date')
->setParameters('date', 'now()');
Теперь вы можете изменить двумя способами, чтобы он работал: 1. Оставьте "s" в "setParameters" → установите параметр
или
Используйте массив при использовании параметра s "в вашем случае:
$query = $em->createQuery('SELECT d FROM test d WHERE d.expDate > :date') ->setParameters(array('date' => 'now()');