@ugin_root

Как в doctrine ORM добавить вычисляемое поле с логическими операторами?

У меня есть запрос следующего вида:
$asins = $asinRepository->createQueryBuilder('asin')
    ->setParameter('master', $user->getId())
    ->addSelect('asin.isInWork AND asin.master = :master AS HIDDEN isInWorkSelf')
    ->addOrderBy('isInWorkSelf', 'desc')
    ->getQuery()
    ->getResult();

Во время выполнения он выдаёт ошибку:
[Syntax Error] line 0, col 27: Error: Expected Doctrine\ORM\Query\Lexer::T_FROM, got 'AND'

Вот такой запрос генерирует PHP:
SELECT 
    asin, 
    asin.isInWork AND asin.master = :master AS HIDDEN isInWorkSelf 
FROM App\Entity\Asin asin 
ORDER BY isInWorkSelf desc

Я так понимаю DQL не умеет добавлять вычисляемое поле если в нём встречаются логические операторы?
Сейчас я нашёл такое решение этой проблемы:
->addSelect('CASE WHEN asin.master = :master THEN asin.isInWork ELSE 0 END AS HIDDEN isInWorkSelf')

Но это выглядит как костыль.
Есть ли способ заставить Doctrine ORM правильно реагировать на логические операторы в вычисляемых полях?
  • Вопрос задан
  • 315 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы