2016-08-08 20 views
1

複数の選択フィールドに奇妙な問題があります。 は、これが私のクエリです:Doctrine QueryBuilder - 複数選択フィールド

->select(
    [ 
     't1.id', 
     't2.id' 
    ] 
) 

そして非常に奇妙な... これをこのような例

$query = $queryBuilder 
      ->select(
       [ 
        'SUM(t1.quantity) AS quantity_t1', 
        't2.currency AS currency_t2', 
        'SUM(t1.amount - t1.promotionDiscount) AS amount_t1', 
        'SUM(ROUND((t1.amount - t1.promotionDiscount)/((100 + t2.tax)/100), 2)) AS amount_net', 
        'SUM(ROUND((t1.amount - t1.promotionDiscount)/'.EXCHANGE_RATE_GBP.', 2)) AS amount_gbp', 
        'SUM(ROUND(ROUND((t1.amount - t1.promotionDiscount)/'.EXCHANGE_RATE_GBP.', 2)/((100 + t2.tax)/100), 2)) AS amount_gbp_net' 
       ] 
      ) 
      ->from(Sale::class, 't2') 
      ->join(
       SaleRow::class, 
       't1', 
       Join::WITH, 
       $queryBuilder->expr()->andX(
        $queryBuilder->expr()->eq('t1.saleId', 't2.id') 
       ) 
      ) 
      ->where(
       $queryBuilder->expr()->between('t2.purchaseTime', ':start', ':end') 
      ) 
      ->andWhere(
       $queryBuilder->expr()->in('t2.orderStatus', ':status') 
      ) 
      ->setParameters(
       [ 
        ':start' => $startDate->format('Y-m-d H:i:s'), 
        ':end' => $endDate->format('Y-m-d H:i:s'), 
        ':status' => ['pending', 'shipped'] 
       ] 
      ) 
      ->getQuery(); 

     $results = $query->getArrayResult(); 

クエリは動作しますが、私は私の選択の配列を変更する場合にのみ、作品:

->select(
    [ 
     'SUM(t1.quantity) AS quantity_t1', 
     'SUM(t1.amount - t1.promotionDiscount) AS amount_t1' 
    ] 
) 

またこれも:

->select(
    [ 
     't2.currency AS currency_t2', 
    ] 
) 

しかし...これは動作しません:

->select(
    [ 
     'SUM(t1.quantity) AS quantity_t1', 
     't2.currency AS currency_t2', 
    ] 
) 

なぜ?

答えて

1

SQLクエリで集計と非集計を混在させることはできません。

集計は1つの値を返すためです。 非集計は各値を返します。

これらの結果をレスポンスにどのように混合するか?

その他の問題は、DQLでROUND()関数を使用することです。しかし、この関数は存在しません、あなたはregister it a custom DQL functionする必要があります。

this questionを参照してください。

+0

okありがとうございます。しかし、非集約セレクトライン(currency_t2としてのt2.currency)を削除しても、それは動作しません... – goldlife

+0

エラーは何ですか? – Alsatian

+0

私はdoctrineから例外があります... "予想される既知の関数は丸みを帯びています" – goldlife

関連する問題