2016-09-30 5 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 기능 prod (doc), 다음 별명에 결과를 지정할 수 있습니다 : 귀하의 답변에 대한

$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