2016-01-22 48 views
0

我正在嘗試收集具有子項OrderPayments的訂單結果集。我想有隻的訂單,其中orderpayments.amount的總和> 0Symfony2查詢生成器「SELECT where sum children> 0」

到目前爲止,我有這個,但不能讓它開始工作,我得到一個

列未找到:未知列「sclr_0 'in'where clause'

// Create the Query Builder 
    $qb = $this->createQueryBuilder('o')->select('o'); 

    // Joins 
    $qb->leftJoin('o.orderPayments', 'op')->addSelect('op')->addSelect('SUM(op.amount) AS total_sum'); 

    // Criteria 
    $qb->where('total_sum > 0'); 
    $qb->andWhere('o.dateDeleted IS NULL'); 

    // Return the result 
    return $qb->getQuery()->getResult(); 
+0

你有沒有檢查完整的查詢日誌? @Adam – AnkiiG

+1

清除緩存。運行'php app/console doctrine:schema:update --force'。如果在這些操作之後仍然存在此錯誤消息,請在此處添加您的實體類代碼以及Doctrine生成的整個SQL查詢。 –

+0

@AnkiiG我檢查了它,它基本上是與sclr_0沒有找到的SELECT SUM(o.orderPayments)AS sclr_0部分。 – Adam

回答

1

您是否在數據庫中試過了您的sql查詢?

您查詢的樣子:

SELECT o.*, SUM(op.amount) AS total 
FROM order o 
LEFT JOIN order_payement op on o.id = op.order_id 
WHERE total > 0; 

此查詢不會對MySQL的工作,你不能在SELECT子句的WHERE子句中使用運算的結果。

您的查詢必須是這樣的:

SELECT o.*, SUM(op.amount) AS total 
FROM order o 
LEFT JOIN order_payement op on o.id = op.order_id 
HAVING SUM(op.amount) > 0 
GROUP BY o.id; 

而且你的查詢生成器將是:

$qb = $this->createQueryBuilder('o') 
    ->select('o'); 
    ->leftJoin('o.orderPayments', 'op') 
    ->addSelect('op') 
    ->addSelect('SUM(op.amount) AS total_sum') 
    ->Where('o.dateDeleted IS NULL') 
    ->having('SUM(op.amount) > 0') 
    ->grouBy('o.id'); 
+0

這是有道理的,儘管更新後的查詢生成器仍然會拋出相同的錯誤... – Adam

+0

'HAVING'太棒了!謝謝 – ziiweb