2011-05-29 94 views
0

使用學說1.2我試圖做到以下幾點:學說1.2計算一對多關係的總和與DQL

可以說我有其中有許多發票(S)的模型工作。

在我的發票模式,我有一個像

public function preDqlSelect(Doctrine_Event $event) 
{ 
    $q = $event->getQuery(); 
    $q->addSelect('(hours * local_rate) as invoice_payout'); 
    $q->addSelect('(hours * global_rate) as invoice_bill'); 
    $q->addSelect('((hours * global_rate) - (hours * local_rate)) as invoice_profit'); 
} 

一個DQL事件偵聽器工作正常,也要注意上面的計算公式爲必要的,因爲這取決於用戶要求它,它需要不同的計算。

我有試圖做類似如下的問題:

選擇工作和foreach求職>發票SUM( 'invoice_payout)作爲job_payout,SUM(' invoice_bill)作爲job_bill,SUM('invoice_profit ')作爲job_profit。

我知道上面的語法是不正確的,但它是我能解釋我之後的最佳方式。

+0

我想鉤子在'Job'實體上?你能用'$ q-> getSqlQuery()'輸出來提示問題嗎? – J0HN 2011-08-26 13:51:01

回答

1

「invoice_payout」和「invoice_bill」在表格中並不存在。您需要使用表中的列。試試這個:

public function preDqlSelect(Doctrine_Event $event) 
{ 
    $q = $event->getQuery(); 
    $q->addSelect('SUM(hours * local_rate) as job_payout'); 
    $q->addSelect('SUM(hours * global_rate) as job_bill'); 
    $q->addSelect('SUM((hours * global_rate) - (hours * local_rate)) as job_profit'); 
    $q->groupBy('job_id'); 
}