Doctrine:在 ORDERBY 中使用用户定义的函数

Chr*_*sto 3 doctrine if-statement sql-order-by symfony

我想要实现的是这样的:

SELECT * FROM users ORDER BY (IF ranking IS NULL, 9999, ranking) ASC
Run Code Online (Sandbox Code Playgroud)

所以,我需要一个 if 在我的orderby. 但似乎用户定义的函数(我创建了一个名为 ComplexIf 的函数)在 OrderBy 中不起作用。

->addOrderBy('ComplexIf(u.ranking IS NULL, 9999, u.ranking )', 'asc')
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?我怎样才能做到这一点?

Chr*_*sto 5

非常感谢 Nic,我终于找到了一个 CASE 而不是 IF 的解决方案!

$query = $this
            ->createQueryBuilder( 'a' )
            ->select('a')
            ->add('from', 'path\to\whatever\table a')
            ->addSelect('CASE WHEN a.ranking IS NULL THEN 9999 ELSE a.ranking END as HIDDEN ORD')
            ->where( 'a.deleted IS NULL' )
            ->orderBy(  'ORD', 'asc' )
            ->getQuery()
            ;     
Run Code Online (Sandbox Code Playgroud)