Php Doctrine2按特定字符串值排序

Php Doctrine2按特定字符串值排序,php,symfony,doctrine-orm,Php,Symfony,Doctrine Orm,例如,我有一个blog posts表,其中包含发布状态(新建、审核、归档) 我如何才能获得状态为“适度”的帖子将放在首位的实体 我知道我可以用PHP和自定义排序解决这个问题,但如何用Doctrine 2解决这个问题?您可以实现自定义DQL函数。这是MySQL的“按字段排序”功能的一个示例: class CustomOrder extends FunctionNode { public $field = null; public $customerOrder = null;

例如,我有一个blog posts表,其中包含发布状态(新建、审核、归档)

我如何才能获得状态为“适度”的帖子将放在首位的实体


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

您可以实现自定义DQL函数。这是MySQL的“按字段排序”功能的一个示例:

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查询中这样调用
orderbycustomorder('status','new','moderation','archive')

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