2016-09-30 3 views
0

Я пытаюсь выполнить арифметическую операцию с помощью doctory Query Builder и присвоить результат псевдониму. Ниже приведен пример из geeksengine, что я хотел бы «преобразовать» в учение QueryBuilder: 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 = $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 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

Смежные вопросы