Doctrine orm Doctrine2-特定的空排序
当您按列Doctrine orm Doctrine2-特定的空排序,doctrine-orm,Doctrine Orm,当您按列a降序排序时,它会将所有a
a
降序排序时,它会将所有a
a
降序排序时,我需要的是以下顺序:
a
----
NULL
NULL
5
4
3
2
1
我知道Oracle有NULLS\u第一个
,在MySQL中你可以使用ORDER BY ISNULL(a)
,但我想知道是否有一种优雅的方式来处理这个问题,只使用Doctrine2功能?因此不使用本机查询等
在S0pa的帮助下回答:我使用Doctrine2的以下新功能节点修复了它:
<?php
namespace MyBundle\General;
use \Doctrine\ORM\Query\Lexer;
class IsnullFunctionNode extends \Doctrine\ORM\Query\AST\Functions\FunctionNode
{
private $isnull;
public function parse(\Doctrine\ORM\Query\Parser $parser)
{
$parser->match(Lexer::T_IDENTIFIER);
$parser->match(Lexer::T_OPEN_PARENTHESIS);
$this->isnull = $parser->ArithmeticPrimary();
$parser->match(Lexer::T_CLOSE_PARENTHESIS);
}
public function getSql(\Doctrine\ORM\Query\SqlWalker $sqlWalker)
{
return 'ISNULL('.$this->isnull->dispatch($sqlWalker).')';
}
}
我不能在我的
orderby
子句中使用这些函数,但是通过执行选择ISNULL(a)作为n_a
我可以在n_a
属性上进行排序。我认为最好的方法是使用定义自己的DQL函数。根据数据库管理系统的不同,您仍然需要处理不同的情况
doctrine:
orm:
entity_managers:
default:
...
dql:
numeric_functions:
isnull: Diagenda\CommonBundle\General\IsnullFunctionNode