5

私はこれをやろうとしています:

SELECT 
     userId, count(userId) as counter 
 FROM 
     quicklink 
 GROUP BY 
     userId 
 HAVING 
     count(*) >= 3'

querybuilderの教義では、私はこれを持っています:

$query = $this->createQueryBuilder('q')
            ->select('userId, count(userId) as counter')
            ->groupby('userId')
            ->having('counter >= 3')
            ->getQuery();

        return $query->getResult();

これは私にこのエラーを与えます:

[Semantical Error] line 0, col 103 near 'HAVING count(*)': Error: Cannot group by undefined identification variable.

本当に教義に苦しんでいます。:(

4

5 に答える 5

2

この種のエラーがまだある人のためにお答えします。

まず最初に、クエリ ビルダー オブジェクト内でネイティブ SQL クエリを変換したようです。さらに、オブジェクトにqという名前を付けました

$query = $this->createQueryBuilder('q');

一般に、これが意味することは、ロジック内にあるすべての条件やグループ化などはqのフィールドに対応する必要があるということです。q.userId, q.gender, ...

したがって、以下のようにコードを記述していれば、エラーを回避できたはずです。

$query = $this->createQueryBuilder('q')
            ->select('q.userId, count(q.userId) as counter')
            ->groupby('q.userId')
            ->having('counter >= 3')
            ->getQuery();

return $query->getResult();
于 2015-09-24T11:02:46.650 に答える
1

'from'ステートメントが欠落していると思います

于 2012-07-30T16:44:38.470 に答える
0

setParameter() メソッドを介して HAVING パラメータを定義することもできます

 $qb->groupBy('userId');
 $qb->having('COUNT(*) = :some_count');
 $qb->setParameter('some_count', 3);
于 2015-04-27T20:08:09.543 に答える