Intereting Posts
Разбирайте XML последовательно в PHP Форматирование строки даты – PHP Как избежать динамических свойств в PHP (поднять ошибку при установке необъявленного свойства) Каков наилучший способ уведомления пользователя после перенаправления правила access_control? Проверьте, существуют ли удаленные изображения PHP Можете ли вы использовать построитель запросов для построения запроса с динамическим предложением WHERE во время выполнения в laravel? Как я могу общаться между PHP и Java-программой? Удалить строку из начала строки Разница между var_dump, var_export и print_r Нужно ли использовать автозагрузку PHP для использования папок? Mock в PHPUnit – множественная конфигурация одного и того же метода с разными аргументами Использование PHP vs ASP.net Ошибка Laravel 5.2 $, не появляющаяся в Blade Используя pdo query () и пользовательский getValue () на том же объекте базы данных? Потяните значение HTML в переменную Javascript

Как ЗАКАЗАТЬ СЛУЧАЙ в Doctrine2 (Symfony2)

Я хочу запустить этот запрос с помощью Doctrine в Symfony 2.3. Но похоже, что Doctrine не понимает инструкцию CASE. Может ли кто-нибудь помочь? Заранее спасибо!

SELECT max(id) id, name FROM cards WHERE name like '%John%' GROUP BY name ORDER BY CASE WHEN name like 'John %' THEN 0 WHEN name like 'John%' THEN 1 WHEN name like '% John%' THEN 2 ELSE 3 END, name 

Если вы используете createQueryBuilder, вы можете использовать

 $ query-> addSelect ("(CASE КОГДА имя типа" John% "THEN 0
            КОГДА имя типа «John%» THEN 1
            КОГДА имя типа «% John%» THEN 2
            ELSE 3 END) КАК СКРЫТЫЙ ОРД ");
 $ query-> orderBy ('ORD', 'DESC');

Обратите внимание, что у вас должно быть «HIDDEN».

Вы также можете использовать собственный запрос doctrine.

CASE является специфичной для поставщика и не поддерживается по принципу доктрины.

Если результат небольшой, моя рекомендация состоит в том, чтобы вытащить весь набор результатов, а затем отсортировать массив.

Если набор результатов будет слишком большим, вы должны написать собственный запрос и увлажнить объект. См. Документацию Doctrine для собственного SQL для получения дополнительной информации об этом. Это выглядит страшно, но имеет смысл, когда вы проходите через пример.

В крайнем случае вы могли бы просто обойти доктрину и использовать низкоуровневый собственный SQL. Подробнее см. В этом сообщении .

Я знаю, что Doctrine Extensions имеет функцию IfElse, которая может работать, но я не слышал много историй успеха.