Doctrine2复杂的排序

时间:2011-09-13 14:13:46

标签: doctrine-orm

我有一个评论表,每个评论的状态都是“已批准”,“等待审核”,“隐藏”。当我显示评论时,我希望他们根据他们的状态 - “已批准”,然后“等待审核”,然后“隐藏”进行排序。我可以用UNION来做到这一点,但这在性能方面是一个糟糕的解决方案。

我想知道是否有“ORDER BY(状态<>'隐藏')DESC”的Doctrine2等价物?我知道按计算字段排序(Can Doctrine2 @OrderBy a calculated field?),但我不知道如何在此处应用它。

2 个答案:

答案 0 :(得分:1)

如果您使用的是2.2,则有一个CASE表达式和一个HIDDEN关键字:

Doctrine CaseExpression EBNF开始,您可以使用

SELECT c, CASE WHEN (c.status = 'hidden') THEN 1 ELSE 0 END AS HIDDEN sortValue FROM Comment c ORDER BY sortValue DESC

答案 1 :(得分:0)

您解决了这个问题吗?另一种方法是做一个sql查询,你可以通过它给状态赋值,然后根据需要按顺序排序。

$ conn = $ entity_manager-> getConnection();   $ stmt = $ conn->查询(“       选择          d。*,'已批准'时的案例状态,然后是1                           当'等待温和'然后2                           当'隐藏'然后3结束序列       按顺序从表顺序    “);

只是循环扔掉它们。