Получить массив с ключом и значением в качестве моих атрибутов выбора в DQL - PullRequest
0 голосов
/ 27 марта 2019

Я делаю запрос, используя DQL

$query = $this->createQueryBuilder('i')
      ->select('(i.sortiesNoSortie)','COUNT(i.participantsNoParticipant)')
      ->groupBy('i.sortiesNoSortie');


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

, но получаю это

array:3 [
  0 => array:2 [
    1 => "76"
    2 => "1"
  ]
  1 => array:2 [
    1 => "82"
    2 => "1"
  ]
  2 => array:2 [
    1 => "83"
    2 => "1"
  ]
]

И я хочу получить это в простом массиве с ключом и значением измой выбор

76 => 1
82 => 1
83 => 1 

Возможно ли это?

1 Ответ

1 голос
/ 27 марта 2019

По понятным причинам в результате получается двухмерный массив, представляющий строки и столбцы, которые вы получите при выполнении запроса. Вдобавок ко всему, в доктрине нет функции, позволяющей преобразовать ее в желаемый формат.

Однако вы можете использовать PHP для переформатирования массива.

$result = $this->createQueryBuilder('i')
  ->select('(i.sortiesNoSortie)','COUNT(i.participantsNoParticipant)')
  ->groupBy('i.sortiesNoSortie')
  ->getQuery()
  ->getArrayResult();

$output = array();
foreach($result as $row) {
    $output[$row[0]] = $row[1];
}

Поначалу кажется, что это не идеально, но если бы доктрина реализовала что-то для форматирования так, как вы хотите, то, скорее всего, она сделала бы что-то похожее и просто обернула бы это для вас хорошей функцией.

Сказав это, может быть более хороший способ обработки данных с использованием PHP, отличный от цикла foreach. В любом случае, не стесняйтесь полностью переформатировать ваши данные в PHP после получения их из доктрины. Очевидно, что это будет в каждом конкретном случае, но кажется, что вы обрабатываете небольшие объемы данных, поэтому дополнительная обработка не будет проблемой.


Редактировать

Спасибо @Matteo за напоминание. array_column - это функция, которую можно использовать для замены цикла foreach.

$output = array_column($result, 1, 0);
...