例如,我有博客帖子表,其中包含发布状态(新的,审核,存档)。
如何才能获得状态为“审核”的帖子位于第一位的实体?
我知道我可以用PHP和自定义排序解决这个问题,但我如何使用Doctrine 2来解决这个问题?
答案 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中进行自定义排序对您的用例同样有效,除非您在许多地方重用自定义顺序功能。