我正在尝试在查询的 order by 子句中使用 MySQL FIELD 函数。我假设 Doctrine 2 不支持开箱即用的 FIELD 函数——是这样吗?如果是这样,我该如何使用它?我是否必须将整个查询转换为 native 查询?是否有添加此功能的 Doctrine 2 扩展?
最佳答案
杰里米·希克斯,感谢 your extension . 我不知道如何将您的功能与教义联系起来,但最终我找到了答案。
$doctrineConfig = $this->em->getConfiguration();
$doctrineConfig->addCustomStringFunction('FIELD', 'DoctrineExtensions\Query\Mysql\Field');
我需要 FIELD
函数来订购我通过 IN
表达式选择的实体。但是这个函数只能在SELECT, WHERE, BETWEEN
子句中使用,不能在ORDER BY
中使用。
解决方案:
$qb
->select("r, field(r.id, " . implode(", ", $ids) . ") as HIDDEN field")
->from("Entities\Round", "r")
->where($qb->expr()->in("r.id", $ids))
->orderBy("field");
为避免在结果行中添加 field
别名,您需要输入 HIDDEN
关键字。所以这如何能够在 Doctrine 2.2 中的 IN
表达式中排序值。
关于mysql - Doctrine 2 mysql FIELD函数按顺序排列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5957330/