У меня есть следующий запрос доктрины в 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 ','
Благодаря комментариям @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
часть запроса.
Других решений пока нет …