【问题标题】:Doctrine How to get result in one row when using addSelect queryDoctrine 使用 addSelect 查询时如何在一行中获得结果
【发布时间】:2016-10-20 09:28:33
【问题描述】:

我的 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 mysql symfony doctrine-orm


    【解决方案1】:

    我认为开箱即用是不可能的。但无论如何,在我看来,这两种结构看起来非常相似。您可以轻松应用基于 PHP 的分组:

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

    希望这会有所帮助...

    【讨论】:

    • 我不敢给出这个答案,但你是对的。
    • 哈,我明白你的意思了:D
    【解决方案2】:

    你也可以使用“getScalarResult”。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-03-02
        • 2019-12-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多