获取带有键和值的数组作为DQL中的select属性

问题描述 投票:0回答:1

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

那可能吗 ?

symfony query-builder dql
1个回答
1
投票

出于显而易见的原因,结果是2D数组,因为它表示在执行查询时将收到的行和列。从我的头脑中,没有一个学说提供的功能将其转换为您想要的格式。

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

虽然起初看起来这并不理想,但实际上如果学说是按照你想要的方式实现某种形式的东西,那么它很可能会做类似的事情并且只为你包装一个很好的功能。

话虽如此,除了foreach循环之外,使用PHP处理数据可能有更好的方法。无论哪种方式,在从学说中获取数据后,不要回避完全重新格式化PHP中的数据。显然,这将是一个案例的事情,但似乎你正在处理少量数据,所以额外的处理不会是一个问题。


编辑

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

$output = array_column($result, 1, 0);
© www.soinside.com 2019 - 2024. All rights reserved.