Doctrine2按某些字符串值排序

时间:2013-04-01 17:58:53

标签: php symfony doctrine-orm

例如,我有博客帖子表,其中包含发布状态(新的,审核,存档)。

如何才能获得状态为“审核”的帖子位于第一位的实体?

我知道我可以用PHP和自定义排序解决这个问题,但我如何使用Doctrine 2来解决这个问题?

1 个答案:

答案 0 :(得分:1)

您可以实现自定义DQL功能。这是一个可能适用于MySQL的order by field功能的例子:

class CustomOrder extends FunctionNode
{
    public $field = null;
    public $customerOrder = null;

    public function parse(\Doctrine\ORM\Query\Parser $parser)
    {
        $parser->match(Lexer::T_IDENTIFIER);
        $parser->match(Lexer::T_OPEN_PARENTHESIS);
        $this->field = $parser->StringPrimary() 
        $parser->match(Lexer::T_COMMA);
        $this->secondDateExpression = $parser->StringPrimary();
        $parser->match(Lexer::T_CLOSE_PARENTHESIS);
    }

    public function getSql(\Doctrine\ORM\Query\SqlWalker $sqlWalker)
    {
        return 'FIELD(' .
            $this->field->dispatch($sqlWalker) . ', ' .
            $this->customOrder->dispatch($sqlWalker) .
        ')'; 
    }
}

您可以在DQL查询中调用此Order By CustomOrder('status', "'new', 'moderation', 'archive'")

我认为在PHP中进行自定义排序对您的用例同样有效,除非您在许多地方重用自定义顺序功能。