Doctrine 1.2用DQL计算oneToMany关系的总和

时间:2011-05-29 23:16:30

标签: php doctrine doctrine-1.2

使用doctrine 1.2我正在尝试执行以下操作:

假设我有一个模型Job,它有很多Invoice(s)。

在我的发票模型中,我有一个像

这样的DQL事件监听器
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');
}

工作正常,还要注意上面是根据需要计算的,因为根据用户的要求,需要以不同的方式计算。

我遇到的问题是尝试执行以下操作:

选择作业和foreach作业 - >发票SUM('invoice_payout)作为job_payout,SUM('invoice_bill)作为job_bill,SUM('invoice_profit')作为job_profit。

我知道上面的语法不是正确的,但这是解释我所追求的最佳方式。

1 个答案:

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