2

テーブルからすべてのイニシャルを取得するためにデータベースにクエリを実行しようとしています。SQLでは、クエリは次のようになります。

SELECT SUBSTRING(t.name, 1, 1) AS initial FROM Tool t GROUP BY initial

しかし、QueryBuilderを使用して、エイリアスでグループ化する方法が見つかりませんでした。私はもう試した:

 $q = $this->em->createQueryBuilder()
     ->select('SUBSTRING(i.name, 1, 1) AS initial')
     ->from('...\Entity\Tool', 't')
     ->groupBy('initial');

Error: 'initial' does not point to a Class.

$q = $this->em->createQueryBuilder()
     ->select('SUBSTRING(t.name, 1, 1)')
     ->from('...\Entity\Tool', 't')
     ->groupBy('SUBSTRING(t.name, 1, 1)');

(t.name, 1, ': Error: Cannot group by undefined identification variable.

そして、ドキュメントを30分探した後、私は再び助けを求めています。それは可能ですか、それとも別の方法に行くべきですか?

4

1 に答える 1

2

大丈夫、

hereで説明されているように、問題は元の sql に起因します。DISTINCT を使用して問題を解決します。

$q = $this->em->createQueryBuilder()
    ->select('DISTINCT UPPER(SUBSTRING(t.name, 1, 1))')
    ->from('...\Entity\Tool', 't')
    ->orderBy('t.name');

安全性を高めるためにUPPERを追加しました。

読んでくれてありがとう!

于 2012-07-13T16:44:24.393 に答える