20

私の Repository クラスでは、次のコードを使用してクエリを実行します。

$query = $this->getEntityManager()->createQuery("
    SELECT s.term, COUNT(s.term) AS freq
    FROM App\Entities\SearchTerm s
    GROUP BY s.term
    ORDER BY s.term ASC
");

$result = $query->getResult();

私が得る結果は次のようなものです:

array (size=4)
  0 => 
    array (size=2)
      'term' => string '' (length=0)
      'freq' => string '1' (length=1)
  1 => 
    array (size=2)
      'term' => string 'foo' (length=3)
      'freq' => string '1' (length=1)
  2 => 
    array (size=2)
      'term' => string 'bar' (length=3)
      'freq' => string '2' (length=1)
  3 => 
    array (size=2)
      'term' => string 'baz' (length=3)
      'freq' => string '2' (length=1)

しかし、結果として連想配列が必要になります。

array (size=4)
  '' => string '1' (length=1)
  'foo' => string '1' (length=1)
  'bar' => string '2' (length=1)
  'baz' => string '2' (length=1)

これは、目的の配列を構築するための追加の for ループなしで可能ですか?

4

5 に答える 5

10

配列が必要な場合はgetArrayResultメソッドを使用できます。

クエリの結果の配列を取得します。

execute のエイリアス (null、HYDRATE_ARRAY)。

$result = $query->getQuery()->getArrayResult();

したがって、このメソッドを使用すると、定数を使用した場合とまったく同じ結果HYDRATE_ARRAYが得られます。

于 2015-12-02T18:19:05.363 に答える
2

実際にはどこかで転置を行う必要があります。によって返されるものと、どの代替モード/バリアントが既に存在するかについては、 Hydration Modesを参照してください。->getResult()

中央の場所に独自の水分補給モードを追加することもできます。これについては、カスタム ハイドレーション モードで説明されています。

于 2012-12-22T13:43:16.287 に答える