J'ai trouvé un moyen d'obtenir des anniversaires à venir en utilisant une requête native dans la doctrine. Ceci est une requête rapide et selon http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/native-sql.html Doctrine utilise ResultSetMapping de la même manière en interne lorsque vous créez des requêtes DQL.
Ceci trouve tous les anniversaires pour les 30 prochains jours.
Utilisez cette méthode avec précaution car elle affectera la manière dont l'entité est chargée ultérieurement. Plus tard dans le script, seuls les champs ajoutés au mappage seront chargés pour cette entité. J'ai chargé la liste par ajax (et l'a ajouté à la session)
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 u.enabled = 1 AND DATE_ADD(u.birthday, INTERVAL YEAR(CURDATE())-YEAR(u.birthday) + IF(DAYOFYEAR(CURDATE()) > DAYOFYEAR(u.birthday),1,0) YEAR)
BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 30 DAY)
ORDER BY CONCAT(SUBSTR(u.birthday,6) < SUBSTR(CURDATE(),6), SUBSTR(u.birthday,6)) ASC", $rsm);
$birthdays = $query->getResult();
Que voulez-vous dire par les prochains anniversaires? – Tom
Pour la semaine en cours, obtenez tous les anniversaires de mes clients. Quelque chose comme Facebook fait pour tous les amis. – Juanma