2013-04-01 89 views
0

例如,我有博客發佈狀態(新建,審覈,存檔)的表格。Doctrine2按特定字符串值排序

我如何才能獲得狀態爲「適度」的帖子將處於第一位的實體?

我知道我可以用PHP和自定義排序來解決這個問題,但我怎麼能用Doctrine 2來做到這一點?

回答

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中進行自定義排序對您的用例同樣有效,除非您在許多地方重複使用自定義順序函數。