КОНКАТ С СЧЕТОМ, СУММОЙ, - PullRequest
0 голосов
/ 28 июня 2018

В сложном запросе у меня есть подзапрос для подсчета / суммирования детей:

->addSelect('(SELECT CONCAT(COUNT(c.id), \'|\', SUM(c.field1), \'|\', SUM(c.field2), \'|\', SUM(c.field3)) FROM App\Entity\Child c WHERE c.parent = p.id GROUP BY c.parent)')

Этот запрос работал идеально, пока я не обновил до новой версии Symfony (4.2) и доктрины orm 2.6.1. Я получил следующую ошибку:

[Syntax Error] line 0, col 25: Error: Expected StateFieldPathExpression | string | InputParameter | FunctionsReturningStrings | AggregateExpression, got 'COUNT'

Я пытался использовать CAST ... AS CHAR (25), но он не работает (получена та же ошибка). Кто-нибудь может мне помочь, пожалуйста?

С наилучшими пожеланиями, Jonathan

Ответы [ 2 ]

0 голосов
/ 02 июля 2018

Я нашел обходной путь: я устанавливаю расширения доктрины и заменяю CONCAT на CONCAT_WS (DoctrineExtensions \ Query \ Mysql \ ConcatWs). С наилучшими пожеланиями

0 голосов
/ 29 июня 2018

Похоже, что это регрессия в функции парсера доктрины StringPrimary. Посмотрев на код, я прокомментировал свое наблюдение в проблеме, связанной с этой проблемой (хотя и не описывал ее полностью).

Принципиально новая функция, в которой отсутствует эта часть, и по умолчанию используется ошибка при обнаружении агрегатных функций:

            default:
            if ($this->isAggregateFunction($lookaheadType)) {
                return $this->AggregateExpression();
            }

PS. ссылка на связанный вопрос: https://github.com/doctrine/doctrine2/issues/7205

...