Я работаю над проектом Symfony 3.4.
Я хочу упорядочить таблицу по updated_at
, если существует (не ноль), по created_at
, если нет.
ВSQL, это работает:
SELECT * FROM `contract`
ORDER BY
(CASE WHEN ISNULL(`updated_at`) THEN `created_at` ELSE `updated_at` END)
DESC
Я пробовал много вещей, но мне не удается заставить его работать с Doctrine Query Builder.
Сначала я попробовал это (синтаксическая ошибка):
$contracts = $em->createQuery(
'SELECT c
FROM AppBundle:Contract c
ORDER BY (CASE WHEN c.updatedAt = :update THEN c.createdAt ELSE c.updatedAt END) DESC')
->setParameter('update', NULL)
->getResult();
Затем я попробовал это согласно этой теме , но у меня нет результата (без ошибок):
$contracts = $rp->createQueryBuilder('c')
->select('(CASE WHEN c.updatedAt != :update THEN 1 ELSE 0 END) AS HIDDEN orderDate')
->orderBy('orderDate', 'DESC')
->addOrderBy('c.createdAt', 'DESC')
->setParameter('update', NULL)
->getQuery()->getResult();
Как я могу отсортироватьконтракты по дате их обновления, если они были обновлены, или по дате их создания, если они не были изменены?
Если это поможет, я использую пакет DoctrineExtensions для других запросов, явидел IfNull
и IfElse
классы, но я не знаю, как использовать их с моим делом.