Доктрина 1.2, вычисляющая сумму отношений oneToMany с DQL - PullRequest
0 голосов
/ 30 мая 2011

Использование доктрины 1.2. Я пытаюсь сделать следующее.

Допустим, у меня есть модель Job, в которой много счетов.

В моей модели счета-фактуры у меня есть прослушиватель событий 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-> Счета SUM ('invoice_payout) в качестве job_payout, SUM (' invoice_bill) в качестве job_bill, SUM ('invoice_profit') в качестве job_profit.

Я знаю, что вышесказанное ни в коем случае не является правильным синтаксисом, но это был лучший способ объяснить, что я преследовал.

1 Ответ

1 голос
/ 27 октября 2011

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