doctrine QueryBuilder算术运算

时间:2016-09-30 08:00:00

标签: php doctrine-orm doctrine-query

我正在尝试使用doctrine Query Builder进行算术运算,并将结果分配给别名。 以下是geeksengine的一个示例,我想将其“转换”为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不是数据库的一部分 - 因此无法映射。

我可以用纯DQL完成它但由于某些原因我必须坚持使用QueryBuilder。

有什么想法吗?

1 个答案:

答案 0 :(得分: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');