SQL 查询转换为 DQL(Symfony2 的 Doctrine)

SQL query convert to DQL (Doctrine for Symfony2)

如何在 DQL (Symfony2) 中使用此查询:

SELECT id FROM user WHERE DATE_FORMAT( birth_date ,'%m-%d') = DATE_FORMAT( NOW() + INTERVAL 7 DAY ,'%m-%d')

我使用 beberlei/DoctrineExtensions,我添加了这是我的配置:

orm:
dql:
    string_functions:
        date_format: DoctrineExtensions\Query\Mysql\DateFormat
        dateadd: DoctrineExtensions\Query\Mysql\DateAdd

我在 UserRepository 中试过这个:

$qb = $this->createQueryBuilder('U');
$qb ->select('U')
    ->where( 'DATE_FORMAT( U.birthDate, %m-%d) = DATE_FORMAT( CURRENT_TIMESTAMP() + INTERVAL 7 DAY, %m-%d' );

但它不起作用。

提前致谢!

加载7天后生日的所有用户:

// Using DQL
$dql = "SELECT u FROM user u WHERE DATE_FORMAT(u.birthDate, '%m-%d') = DATE_FORMAT(:dateIn7Days, '%m-%d')";

$query = $em->createQuery($dql);
$query->setParameter('dateIn7Days', new \DateTime('+7 days'));

$users = $query->getResult();

使用 QueryBuilder:

$qb = $this->createQueryBuilder();

$qb
   ->select('u')
   ->from('User', 'u')
   ->where(
       $qb->expr()->eq(
           "DATE_FORMAT(u.birthDate, '%m-%d')",
           "DATE_FORMAT(:dateIn7Days, '%m-%d')")
       )
   ->setParameter('dateIn7Days', new \DateTime('+7 days'));

$query = $qb->getQuery();
$users = $query->getResult();