Symfony3-Doctrine: порядок в каждом случае, когда

Felurian спросил: 03 ноября 2018 в 08:57 в: mysql

Я работаю над проектом 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, но не знаю, как использовать их с моим делом.


0 ответов