web-dev-qa-db-ja.com

日と月でグループ化Doctrine

ユーザーを誕生日別にリストしたいので、年ではなく月と日です。

私はこのクエリを持っています

SELECT * 
FROM user 
WHERE birthDate IS NOT NULL 
GROUP BY MONTH(birthDate), DAY(birthDate)

しかし、SymfonyとDoctrineでそれを使用する方法がわかりません。私は試した

$result = $em->getRepository("AcmeApplicationBundle:SecurityServiceUser")
            ->createQueryBuilder('user')
            ->where('user.birthDate IS NOT NULL')
            ->groupBy('MONTH(user.birthDate), DAY(user.birthDate)')
            ->getQuery()
            ->getResult(); 

そして

$result = $em->getRepository("AcmeApplicationBundle:SecurityServiceUser")
            ->createQueryBuilder('user')
            ->where('user.birthDate IS NOT NULL')
            ->groupBy('MONTH(user.birthDate)')
            ->groupBy('DAY(user.birthDate)')
            ->getQuery()
            ->getResult(); 

しかし、どちらの場合もエラーが発生します

[セマンティックエラー]行0、列165'MONTH(birthDate) 'の近く:エラー:未定義のIDまたは結果変数でグループ化できません。

16
Ajouve

値のエイリアスを設定していません。これが更新されたバージョンです:

   $result = $em->getRepository("AcmeApplicationBundle:SecurityServiceUser")
        ->createQueryBuilder('user')
        ->select(' user.username, MONTH(user.birthDate) AS gBmonth, DAY(user.birthDate) AS gBday')
        ->where('user.birthDate IS NOT NULL')
        ->groupBy('gBmonth')
        ->addGroupBy('gBday')
        ->getQuery()
        ->getResult(); 

これは正常に機能するはずです。