2016-09-30 134 views
0

我正在嘗試使用教義查詢生成器進行算術運算,並將結果分配給別名。 以下是geeksengine一個例子,我想「轉換」教義的QueryBuilder: 學說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 = $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不是數據庫的一部分 - 所以它c沒有被映射。

我可以用純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