У меня есть сущности User и UserGroup. У каждого пользователя есть группа (UserGroup), и у каждого пользователя есть начальник (User).
Я хотел бы получить список групп и решить, является ли текущий пользователь начальником кого-либо в группе. Я уже реализовал это в SQL, а теперь попытался решить с помощью Doctrine. Вот что я пробовал:
$qb = em()->createQueryBuilder()
->select(array('gr.id AS group_id', 'gr.name AS group_name', 'COUNT(us.boss = :current_user_id)>0 AS is_boss'))
->from('\App\Entity\UserGroup', 'ug')
->leftJoin('\App\Entity\User', 'us', 'WITH', 'us.group = ug.id')
->setParameter('current_user_id', $_SESSION['uid'])
->groupby('gr.id')
;
$groups = $qb->getQuery()->getScalarResult();
К сожалению, у меня есть неперехваченный QueryException, и я не знаю, как это исправить. Как можно поместить выражение внутри функции COUNT(...)?
Он работает без части COUNT(...). Сообщение об ошибке просто содержит запрос DQL: SELECT gr.id AS group_id, gr.name AS group_name, COUNT(us.boss = :current_user_id)>0 AS is_boss FROM \App\Entity\UserGroup ug LEFT JOIN \App\Entity\User us WITH us.group = ug.id GROUP BY gr.id






Вы можете использовать Функция mysql case для этого:
$queryBuilder->addSelect('case when COUNT(case when us.boss = :current_user_id then 1 else 0 end)>0 then 1 else 0 end AS is_boss');
Ссылка
Что за сообщение об ошибке? И вам следует
groupByсо всеми столбцами, а не только с id.