我有一个评论表,每个评论的状态都是“已批准”,“等待审核”,“隐藏”。当我显示评论时,我希望他们根据他们的状态 - “已批准”,然后“等待审核”,然后“隐藏”进行排序。我可以用UNION来做到这一点,但这在性能方面是一个糟糕的解决方案。
我想知道是否有“ORDER BY(状态<>'隐藏')DESC”的Doctrine2等价物?我知道按计算字段排序(Can Doctrine2 @OrderBy a calculated field?),但我不知道如何在此处应用它。
答案 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结束序列 按顺序从表顺序 “);
只是循环扔掉它们。