0

例如,我有发布状态的博客文章表(新、审核、存档)。

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

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

4

1 回答 1

1

您可以实现自定义 DQL 函数。这是一个可能适用于 MySQLorder 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) .
        ')'; 
    }
}

Order By CustomOrder('status', "'new', 'moderation', 'archive'")您会在 DQL 查询中这样调用它。

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

于 2013-04-01T18:23:17.850 回答