我在SystemRepository中有这个Doctrine查询:
$qb = $this->createQueryBuilder('s')
->select('s')
->addSelect('item')
->from('Item', 'item')
->where('item.iId = s.id');
通过此查询,我得到的结果如下:
Array
(
[0] => System 1
[1] => ItemObject related to SystemObject 1
[2] => SystemObject 2
[3] => ItemObject related to SystemObject 2
[4] => SystemObject 3
[5] => ItemObject related to SystemObject 3
)
但我希望得到这样的结果:
Array
(
[0] => Array(
[0] => SystemObject 1
[1] => ItemObject related to SystemObject 1
),
[1] => Array(
[0] => SystemObject 2
[1] => ItemObject related to SystemObject 2
),
[2] => Array(
[0] => SystemObject 3
[1] => ItemObject related to SystemObject 3
)
)
这可能吗?
由于技术原因,我无法在系统项目之间进行Doctrine映射。
答案 0 :(得分:2)
我认为这不可能开箱即用。但无论如何,在我看来,这两个结构看起来非常相似。您可以轻松地应用基于PHP的分组:
$grouped = [];
for ( $i = 0; $i < count($data); $i+=2){
$grouped[] = [
$data[$i],
$data[$i+1]
];
}
希望这会有所帮助......
答案 1 :(得分:0)
您也可以使用“getScalarResult”。
答案 2 :(得分:-2)
开箱即用,但您可以在结果集上使用array_chunk。
$data = Array
(
'SubscriptionObject 1',
'PaymentObject related to SubscriptionObject 1',
'SubscriptionObject 2',
'PaymentObject related to SubscriptionObject 2',
'SubscriptionObject 3',
'PaymentObject related to SubscriptionObject 3'
);
$grouped = array_chunk($data, 2);
var_dump($grouped);
没有魔法方式来更改密钥,在分块数组后使用array_walk
函数:
array_walk($grouped, function(&$item){
$item = [
'subscription' => $item[0],
'payment' => $item[1]
];
return $item;
});