Не дубликат.
Я спрашиваю, как заставить работать CASE или почему он не работает (особенно если учесть, что то же выражение CASE работает в чистом SQL). Я НЕ ищу альтернативных решений.
Я работаю с Doctrine ORM (и его производным от SQL языком запросов - DQL) и пытаюсь создать DQL-запрос с выражением CASE в предложении WHERE, но Doctrine выдает мне ошибку.
DQL:
SELECT p FROM Entity\Product p WHERE (CASE WHEN p.price < 20 THEN p.quantity >= 30 ELSE p.quantity > 5 END)
Я получаю следующую ошибку:
[Syntax Error] line 0, col 87: Error: Expected Doctrine\ORM\Query\Lexer::T_ELSE, got '>'
(вокруг >= 30
выше)
Я не могу понять, что я делаю неправильно. Я знаю, что DQL поддерживает выражения CASE. Я нашел ТАК ответы, которые используют их. По крайней мере, в трассировке стека есть вызов парсера, подтверждающий это.
Тот же оператор SQL:
SELECT p.* FROM product p WHERE (CASE WHEN p.price < 20 THEN p.quantity >= 30 ELSE p.quantity > 5 END)
работает как надо.