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