簡體   English   中英

Doctrine 如何在使用 addSelect 查詢時在一行中獲得結果

[英]Doctrine How to get result in one row when using addSelect query

我的 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
            )
)

這可能嗎?

由於技術原因,我無法在 system 和 item 之間進行 Doctrine 映射。

我認為這不可能開箱即用。 但無論如何,在我看來,這兩種結構看起來非常相似。 您可以輕松應用基於 PHP 的分組:

$grouped = [];
for ( $i = 0; $i < count($data); $i+=2){
    $grouped[] = [
        $data[$i],
        $data[$i+1]
    ];
}

希望這有助於...

您也可以使用“getScalarResult”。

開箱即用是不可能的,但是您可以在結果集上使用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;
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM