Доктрина FIND_IN_SET приводит к ошибке: ожидаемый конец строки, получил ‘(‘

У меня есть следующий запрос доктрины в Symfony2:

$query = $em
->createQuery("SELECT m FROM MyBackendBundle:Merchant m
WHERE m.active = :active
ORDER BY FIND_IN_SET(m.range, 'all', 'without_special'), m.tradingAmount DESC
")
->setParameter('active', true)
;

Но это приводит к следующей ошибке:

[Syntax Error] line 0, col 112: Error: Expected end of string, got '('

а также:

QueryException:
SELECT m FROM My\Bundle\BackendBundle\Entity\Merchant m
WHERE m.active = :active
ORDER BY FIND_IN_SET(m.range, 'all', 'without_special') ASC, m.tradingAmount DESC

Я использую FIND_IN_SET расширение доктрины от Беберлей чтобы иметь возможность использовать его в запросе.

Есть идеи, почему это происходит?

Обновить:

С использованием FIND_IN_SET в SELECT как псевдоним так:

SELECT m, FIND_IN_SET(m.range, 'all', 'without_special') AS HIDDEN findInSet
FROM MyBackendBundle:Merchant
WHERE m.active = :active
ORDER BY findInSet, m.productAmount DESC

приводит к следующей ошибке:

[Syntax Error] line 0, col 56: Error: Expected Doctrine\ORM\Query\Lexer::T_CLOSE_PARENTHESIS, got ','

0

Решение

Благодаря комментариям @qooplmao это рабочая версия:

$query = $em
->createQuery("SELECT m, FIND_IN_SET(m.range, 'all,without_special') AS rangeOrdering
FROM MyBackendBundle:Merchant m
WHERE m.active = :active
ORDER BY rangeOrdering, m.tradingAmount DESC
")
->setParameter('active', true)
;

FIND_IN_SET имеет только два параметра и должен находиться в пределах SELECT часть запроса, так как функции не могут быть использованы в ORDER BY часть запроса.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]