В моем классе 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 для создания желаемого массива?
Я знаю его старый, но сегодня я должен был сделать почти то же самое, мое решение без специального гидратора
как
$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. Пользовательские режимы гидратации .