Doctrine如何在使用addSelect查询时将结果放在一行中

时间:2016-10-20 09:28:33

标签: php mysql symfony doctrine-orm

我在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映射。

3 个答案:

答案 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;
});