Получить следующие дни рождения с помощью Doctrine - PullRequest
1 голос
/ 22 июня 2010

Есть ли способ получить следующие дни рождения, используя только DQL (Doctrine Query Language)?Я решаю проблему с помощью функции SQL DAYOFYEAR, но я думаю, что это не правильно, потому что это работает только на MySQL, и если мне нужно перейти на MSSQL (например), который не работает.

Спасибо заранее.

Ответы [ 2 ]

1 голос
/ 04 февраля 2017

Я нашел способ получить ближайшие дни рождения, используя нативный запрос в доктрине.Это быстрый запрос, и в соответствии с http://docs.doctrine -project.org / projects / doctrine-orm / en / latest / reference / native-sql.html Doctrine так же использует ResultSetMapping внутри себя при создании DQLзапросы.

Это находит все дни рождения в следующие 30 дней.

Используйте этот метод с осторожностью, поскольку он повлияет на то, как объект будет загружен позже.Далее в скрипте для этой сущности будут загружены только те поля, которые добавлены в отображение.Я загрузил список с помощью ajax (и добавил его в сессию)

use Doctrine\ORM\Query\ResultSetMapping;

$rsm = new ResultSetMapping;
$rsm->addEntityResult('AppBundle:User', 'u');
$rsm->addFieldResult('u', 'id', 'id');
$rsm->addFieldResult('u', 'firstname', 'firstname');
$rsm->addFieldResult('u', 'lastname', 'lastname');
$rsm->addFieldResult('u', 'birthday', 'birthday');
$rsm->addFieldResult('u', 'image', 'image');

$query = $this->entityManager->createNativeQuery("
        SELECT * 
        FROM user u 
        WHERE DAYOFYEAR(u.birthday) 
        BETWEEN DAYOFYEAR(CURDATE()) AND DAYOFYEAR(DATE_ADD(CURDATE(), INTERVAL ? DAY))
        ORDER BY DAYOFYEAR(u.birthday) ASC
        ", $rsm);

$query->setParameter(1, '30');

$birthdays = $query->getResult();
1 голос
/ 22 июня 2010

Вам не нужна функция из MySQL. Просто используйте функцию PHP date и используйте формат "z". Цитирование документов PHP:

z -> День года (начиная с 0) -> от 0 до 365

В качестве альтернативы, вы также можете использовать strftime с "% j" (или любым другим, что вам подходит)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...