3

Doctrine2 で使用したい SQL クエリがあります。

私のクエリは、データベースに移動し、GROUP BYユーザーの状態と状態COUNTごとのユーザー数を実行します。

COUNT次に、テーブルをすべてのユーザーに参加させ、すべての州の割合を作成しようとしています。

return $this->getEntityManager()
            ->createQuery("
                SELECT COUNT(u.id) as total, 
                    (100*(COUNT( u.id ) /  total_users.total)) as percent
                FROM UserBundle:User u,
                    (SELECT COUNT(*) as total
                     FROM UserBundle:User) as total_users
                LEFT JOIN u.idUserEstado ue
                GROUP BY u.idUserEstado")
            ->getResult();

問題は、Doctrine2 クエリを実行すると例外が発生することです。

[Semantical Error] line 0, col 397 near 
'(SELECT COUNT(': Error: Class '(' is not defined. 

SELECTDoctrine は、FROM節でそれを認識していません。

4

3 に答える 3

2

from 句の選択は教義 2 では処理されません

doctrine の jira にはクローズされた (そして受け入れられていない) 機能リクエストがあります: http://www.doctrine-project.org/jira/browse/DDC-2793

DQL は、オブジェクトのクエリに関するものです。FROM 句でサブセレクトをサポートするということは、DQL パーサーが結果セット マッピングを作成できなくなることを意味します (サブクエリによって返されるフィールドがオブジェクトと一致しなくなる可能性があるため)。これが、サポートできない理由です (ハイドレーションなしでクエリを実行する場合にのみサポートすることは、クエリの解析が実行モードに依存する必要があることを意味するため、IMO にはなりません)。

于 2015-01-10T03:52:00.720 に答える
1
(SELECT COUNT( * ) as total FROM UserBundle:User) as total_users

COUNT(*)DQLには存在しない可能性があります。試してみてくださいCOUNT(u.id)、結果は同じになります。EntityRepositoryでこれを試すこともできます:

$qb->select(array(
    'count(u.id) as total',
    '(100*(count(u.id)/total_users.total)) as percent',
    'select count(u.id) as total_users) as total_users'))
   ->from('UserBundle:User')
   ->leftJoin('u.idUserEstado','ue')
   ->groupBy('u.idUserEstado');

return $qb->getQuery()->getResult();

出典:Googleユーザーグループの問題

于 2012-06-21T11:52:17.047 に答える
0

...  FROM UserBundle:User u, ...

は奇妙です。クラス User が見つからない可能性があります。

于 2012-06-21T11:46:58.590 に答える