Доктрина 2: результат запроса как ассоциативный массив

В моем классе 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 для создания желаемого массива?

Я знаю его старый, но сегодня я должен был сделать почти то же самое, мое решение без специального гидратора

  • ИНДЕКС BY s.term
  • модифицируйте getResult (), чтобы быть уверенным

как

 $result = $query->getQuery()->getResult(\Doctrine\ORM\AbstractQuery::HYDRATE_ARRAY); 

или

 $result = $query->getQuery()->getResult(2); 
  • форматировать результат

в виде

 $resultNeeded = array_map(function($value) { return $value['freq']; }, $result); 

Если вам нужен массив, вы можете использовать метод getArrayResult .

Получает массив результатов для запроса.

Псевдоним для выполнения (null, HYDRATE_ARRAY).

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

Таким образом, использование этого метода даст вам тот же результат, что и константа HYDRATE_ARRAY .

На самом деле где- то перестановка должна быть выполнена. См. 14.7.4. Режимы гидратации о том, что возвращается ->getResult() и какие альтернативные режимы / варианты уже существуют.

Вы также можете добавить свой собственный режим гидратации в центральном месте. Это объясняется в 14.7.4.5. Пользовательские режимы гидратации .