我正在使用 Symfony2 框架和 Doctrine ORM 构建一个应用程序。我有一张航空公司的表格,其中缺少一些 IATA 代码。我正在输出一个列表,按此 IATA 代码排序,但我得到了不希望的结果,即具有空 IATA 代码的记录排在顶部。
在 MySQL 中,这很简单,使用 ORDER BY ISNULL(code_iata), code_iata
但我不知道 DQL 的等价物是什么。我试过
$er->createQueryBuilder('airline')->orderBy('ISNULL(airline.codeIata), airline.codeIata', 'ASC')
但这给了我一个语法错误。
Doctrine 文档也没有给我答案。有办法吗?
最佳答案
您可以在 DQL 中使用以下技巧最后对 NULL 值进行排序
$em->createQuery("SELECT c, -c.weight AS HIDDEN inverseWeight FROM Entity\Car c ORDER BY inverseWeight DESC");
HIDDEN
关键字(自 Doctrine 2.2 起可用)将导致忽略 inverseWeight
结果集中的字段,从而防止不受欢迎的 mixed results .(排序字段值被反转,因此顺序也必须反转,这就是查询使用
DESC
顺序,而不是 ASC
的原因。)积分属于this answer .
关于symfony - 如何在 DQL 中按 NULL 排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12652034/