Ответ 1
Можно использовать оператор case
:
SELECT (CASE WHEN main.id = 1 THEN 1 ELSE 0 END) AS test FROM Entity main ORDER BY test
Согласно DDC-2204 issue, в котором говорится
[Order by With Equals] поддерживается включением условия в предложение SELECT, сглаживание его, а затем его использование. Возможно, вам придется использовать "AS HIDDEN name", чтобы он не появлялся в результате
после DQL должно быть возможно:
SELECT main.id = 1 AS test FROM Entity main ORDER BY test
Однако, когда я пытаюсь это сделать (используя 2.4), я получаю
Error: Expected Doctrine\ORM\Query\Lexer::T_FROM, got '='
Кажется, что предложенный разработчиком метод помещения условия в SELECT не работает. Является ли это ошибкой и/или есть другой способ выбора и/или упорядочения по условию.
Можно использовать оператор case
:
SELECT (CASE WHEN main.id = 1 THEN 1 ELSE 0 END) AS test FROM Entity main ORDER BY test
Я не уверен, если я правильно понимаю эту статью, но, похоже, она ссылается на условие в предложении order by:
SELECT main.id AS test FROM Entity main ORDER BY test = 1