Сравните количество подзапросов со скаляром - PullRequest
0 голосов
/ 04 февраля 2020

Я использую Symfony 4.3, и у меня возникла проблема в моем DQL-запросе.

Цель моего запроса - выбрать адрес электронной почты пользователя, для которого у меня есть список прав, это мой DQL-запрос:

        $qb = $this->createQueryBuilder('u')
        ->select('u.email,u.id')
        ->leftJoin('u.profile', 'profile')
        ->leftJoin('u.country', 'country')
        ->leftJoin('profile.privileges', 'pri')
        ->leftJoin('pri.ressource', 'resource')
        $checkRightQuery = $this->em->createQueryBuilder()
            ->select('count(rc)')
            ->from(Ressource::class, 'rc')
            ->leftJoin('rc.privileges', 'privil')
            ->leftJoin('privil.profile', 'prof')
            ->leftJoin('prof.user', 'user')
            ->where( $this->em->getExpressionBuilder()->in('rc.actionFront', ':rights'))
            ->andWhere('user.id =u.id');
        $qb->andWhere(
            $this->em->getExpressionBuilder()->eq(count($rights),
                $checkRightQuery
            )
        );

    $qb->setParameters(['rights' => $rights]);

Проблема в том, что когда я беру результат подсчета, он не является скаляром и не может сравнивать его со скаляром.

Любая помощь, пожалуйста?

1 Ответ

1 голос
/ 12 февраля 2020

Попробуйте использовать круглые скобки для вашего условия с подзапросом:

$qb->andWhere(
        $this->em->getExpressionBuilder()->eq(count($rights),
            '(' . $checkRightQuery . ')'
        )
    );

Ссылки

Doctrine ошибка возврата с «eq», нет с «в»

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...