2011-05-29 101 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'); 
}