首页 > 解决方案 > 在 Doctrine QueryBuilder OrderBy 中使用 IF 语句

问题描述

我正在尝试使用 Doctrine Query Builder 从表中获取数据并将结果排序为特定顺序。我试图在我的中使用 IF 语句,$qb->orderBy()但这会导致语法错误。

这是我的 IF 语句代码:

$qb->select('approve')
   ->from(Approve::class, 'approve')
   ->orderBy("IF(approve.approverType = 'PLAN', 1, 
              IF(approve.approverType = 'QUOTE', 2,
                 IF(approve.approverType = 'POE', 3, 4)
              )
           )", 'ASC')
   ->addOrderBy('approve.approvalOrder', 'ASC');

$sql = $qb->getQuery()->getSQL();
$results = $qb->getQuery()->getResult();

语法错误:

[语法错误] 第 0 行,第 129 列:错误:预期的已知函数,得到 'IF'

按照这篇文章的建议,我用 CASE 替换了 IF 语句。但它仍然会导致语法错误。

$qb->select('approve')
   ->from(Approve::class, 'approve')
   ->orderBy("case when approve.approverType = 'PLAN' then 1 else
                 case when approve.approverType = 'QUOTE' then 2 else
                      case when approve.approverType = 'POE' then 3 else 4", 'ASC')
   ->addOrderBy('approve.approvalOrder', 'ASC');

$sql = $qb->getQuery()->getSQL();
$results = $qb->getQuery()->getResult();

语法错误:

[语法错误] 第 0 行,第 134 列:错误:预期的字符串结尾,得到“何时”

有谁知道这里发生了什么?如果你能指出我正确的道路,我真的很感激。

标签: phpsymfonydoctrinequery-builder

解决方案


推荐阅读