获取包含键和值的数组作为我在 DQL 中的 select 属性

Get array with key and value as my select attributes in DQL

我正在使用 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"
  ]
]

我想用我的 select

中的键和值在一个简单的数组中获取它
76 => 1
82 => 1
83 => 1 

这可能吗?

由于显而易见的原因,结果是一个二维数组,因为它表示您在执行查询时将收到的行和列。从我的头顶来看,没有一个学说提供的功能来将它转换成你想要的格式。

但是您可以使用 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];
}

虽然一开始这似乎并不理想,但实际上,如果 doctrine 要实现某些东西以按照您想要的方式对其进行格式化,它很可能会做类似的事情,只是将其包装在一个适合您的函数中。

话虽如此,使用 PHP 可能有比 foreach 循环更好的处理数据的方法。无论哪种方式,在从教义中获取数据后,不要完全回避在 PHP 中重新格式化数据。显然,这将视具体情况而定,但您似乎正在处理少量数据,因此额外的处理不会成为问题。


编辑

感谢@Matteo 提醒我。 array_column 是可以用来替换 foreach 循环的函数。

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