Mam problem z querybuilderem z doctrine. Utworzyłem zapytanie z warunkiem, w którym to chcę porównać sumy zwrócone poprzez podzapytania:
$qb = $this->createQueryBuilder('f');
...
$qb->addWhere($qb->expr()->gt(
'(SELECT SUM(bar.amount) FROM App\Entity\Bar bar WHERE bar.foos = f.id GROUP BY bar.foo_bars),
'(SELECT SUM(baz.amount) FROM App\Entity\Baz baz WHERE baz.foos = f.id GROUP BY baz.foo_baz)'
)
Wszystkie działa ok, doctrine trawi to oczywiście bez problemu.
Problem pojawia się natomiast kiedy tabela Bar lub Baz nie posiada rekordu dla danego Foo. Podzapytanie zwraca wtedy NULL i nici z porównania.
Jedynym rozwiązaniem jaki mi przychodzi do głowy jest oczywiście COALESCE:
$qb->addWhere($qb->expr()->gt(
'(COALESCE((SELECT SUM(bar.amount) FROM App\Entity\Bar bar WHERE bar.foos = f.id GROUP BY bar.foo_bars),0))',
'(COALESCE((SELECT SUM(baz.amount) FROM App\Entity\Baz baz WHERE baz.foos = f.id GROUP BY baz.foo_baz),0))'
)
Doctrine jednak nijak tego nie trawi zwracając:
Error: Expected Literal, got 'SELECT'
Jak to ugryźć?
Z góry dzięki.