【发布时间】:2018-11-27 10:37:26
【问题描述】:
我正在开发一个 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();
然后,我按照this topic尝试了这个,但是我没有结果(没有错误):
$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 bundle 用于其他查询,我看到了 IfNull 和 IfElse 类,但我不知道如何在我的案例中使用它们。
【问题讨论】:
标签: mysql doctrine-orm sql-order-by symfony-3.4 doctrine-query