Доктрина, запрос с подсчетом и объединением

У меня есть запрос, который я создал с помощью queryBuilder в Doctrine:

$results = $this->createQueryBuilder('cc')
            ->select("CONCAT('in: ', COUNT(CASE WHEN cc.direction = 'in' THEN 1 END),', out:', COUNT(CASE WHEN cc.direction = 'out' THEN 1 END)) AS summary")
            ->addSelect(['ch.name as channelName'])
            ->innerJoin('cc.channel','ch')
            ->where('cc.case = :caseId')
            ->andWhere('cc.channel IN (1,2)')
            ->andWhere('cc.office_id = :transOffice')
            ->andWhere('cc.id IN (:contactsIds)')
            ->setParameters($parameters)
            ->groupBy('ch.id')
            ->addGroupBy('cc.direction')
            ->getQuery()
            ->getArrayResult();

Основная проблема связана с функциями: COUNT и CONCAT. Без этого выбора он работает, но с ним - нет. Я получаю сообщение об ошибке:

Доктрина, запрос с подсчетом и объединением

Очень похожий необработанный sql работает очень хорошо Это выглядит так:

select Count(*) as number_of_contacts, channel_id, CONCAT('in: ', COUNT(CASE WHEN direction = 'in' THEN 1 END),', out:', COUNT(CASE WHEN direction = 'out' THEN 1 END)) AS summary from cic_case_contacts where case_id = 328678 group By channel_id
ORDER BY channel_id

но в построителе запросов у меня проблема с синтаксисом. Как мне правильно написать этот запрос в построителе запросов? Буду признателен за помощь. С наилучшими пожеланиями

Я вообще не знаю этого API, но, возможно, вам нужно вызвать функцию select raw вместо того, что вы сейчас вызываете.

Tim Biegeleisen 17.12.2018 12:18

Да вы правы напишу raw sql. Это будет работать.

Krzysztof Michalski 17.12.2018 12:29
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
0
2
63
0

Другие вопросы по теме