0
例如,我有博客發佈狀態(新建,審覈,存檔)的表格。Doctrine2按特定字符串值排序
我如何才能獲得狀態爲「適度」的帖子將處於第一位的實體?
我知道我可以用PHP和自定義排序來解決這個問題,但我怎麼能用Doctrine 2來做到這一點?
例如,我有博客發佈狀態(新建,審覈,存檔)的表格。Doctrine2按特定字符串值排序
我如何才能獲得狀態爲「適度」的帖子將處於第一位的實體?
我知道我可以用PHP和自定義排序來解決這個問題,但我怎麼能用Doctrine 2來做到這一點?
您可以實現自定義的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中進行自定義排序對您的用例同樣有效,除非您在許多地方重複使用自定義順序函數。