0

使用学说 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 和 foreach job->invoices SUM('invoice_payout) 作为 job_payout,SUM('invoice_bill) 作为 job_bill,SUM('invoice_profit') 作为 job_profit。

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

4

1 回答 1

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');
}
于 2011-10-27T09:45:12.237 回答