在DQL中获取具有键和值的数组作为我的选择属性

时间:2019-03-26 23:07:12

标签: symfony query-builder 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"
  ]
]

我想通过选择键和值在一个简单的数组中获得

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

有可能吗?

1 个答案:

答案 0 :(得分: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);