Php 原则1.2用DQL计算一对多关系之和

Php 原则1.2用DQL计算一对多关系之和,php,doctrine,doctrine-1.2,Php,Doctrine,Doctrine 1.2,使用原则1.2,我试图做到以下几点: 假设我有一份有很多发票的模特工作 在我的发票模型中,我有一个DQL事件监听器,如 public function preDqlSelect(Doctrine_Event $event) { $q = $event->getQuery(); $q->addSelect('(hours * local_rate) as invoice_payout'); $q->addSelect('(hours * global_ra

使用原则1.2,我试图做到以下几点:

假设我有一份有很多发票的模特工作

在我的发票模型中,我有一个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');
}
这很好,还要注意,上面的计算是根据需要进行的,因为根据用户的要求,需要进行不同的计算

我遇到的问题是尝试做以下事情:

选择Job and foreach Job->invoices SUM('invoice\u payout')作为Job\u payout,SUM('invoice\u bill)作为Job\u bill,SUM('invoice\u profit')作为Job\u profit

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

表中实际不存在“发票付款”和“发票账单”。您需要使用表中的列。试试这个:

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');
}

我想钩子在
作业
实体上?您能用
$q->getSqlQuery()
输出对问题进行更新吗?