2016-09-30 29 views
0

私はdoctrine Query Builderで算術演算を行い、その結果を別名に割り当てようとしています。 doctrine QueryBuilderの算術演算

/* 
Query 1: This query calculates the total price before discount and after discount for each order item. 
*/ 
SELECT order_id, 
    product_id, 
    unit_price * quantity AS "regular_price", 
FROM order_details; 

これは、私が始めたものです:: 以下は、私が教義QueryBuilderに「変換」したいgeeksengineの例である

$queryBuilder = $this->em->createQueryBuilder(); 
$queryBuilder->select('o') 
      ->addSelect('o.unit_price * o.quantity AS regular_price') 
      ->from('Test\Model\Entity\OrderEntity', 'o'); 

しかし、これは例外をスローします:

RuntimeException 
Not all identifier properties can be found in the ResultSetMapping: id 

regular_priceはデータベースの一部ではないためですマップされません。

私はそれを純粋なDQLで行うことができますが、何らかの理由で私はQueryBuilderを固執する必要があります。

アイデア?

答えて

0

あなたのエイリアスに結果を割り当て、その後、算術Exprに機能proddoc)を使用することができます。あなたの答えのための

$queryBuilder = $this->em->createQueryBuilder(); 
$queryBuilder->select('o') 
      ->addSelect($queryBuilder->expr()->prod('o.unit_price', 'o.quantity').' AS regular_price') 
      ->from('Test\Model\Entity\OrderEntity', 'o'); 
+0

おかげで、私はまだ同じ例外が – Lowtower

+0

、それは別の部分から来ることができますあなたのコード?私はこの部分の 'id'に関連するものは見ません... – Veve

+0

それは私の最初の考えでもありました。しかし、addSelect()でその行をスキップすると、すべて正常に動作します。 – Lowtower