Order By 中的 Doctrine 2 MySQL FIELD 函数
尝试在 Doctrine 2 查询的 order by 子句中使用 SQL FIELD 函数时,由于其固有地缺乏对该功能的支持,可能会遇到限制。
FIELD 是否有 Doctrine 2 扩展?
幸运的是,存在 Doctrine 2由 Jeremy Hicks 开发的扩展,添加了 FIELD 功能。要集成此扩展,请按照以下步骤操作:
使用 Composer 安装扩展:
composer require doctrine-extensions/doctrine-extensions
将扩展添加到 Doctrine 配置中:
<code class="php">$doctrineConfig = $em->getConfiguration(); $doctrineConfig->addCustomStringFunction('FIELD', 'DoctrineExtensions\Query\Mysql\Field');</code>
限制:字段排序子句限制
尽管通过扩展启用了字段功能,但原则 2 中仍然存在限制.FIELD 函数不能直接在 order by 子句中使用。
解决方案:使用 HIDDEN 别名
要绕过此限制,可以使用 HIDDEN 字段别名在您的查询中:
<code class="php">$qb ->select("r, FIELD(r.id, " . implode(", ", $ids) . ") as HIDDEN field") ->from("Entities\Round", "r") ->where($qb->expr()->in("r.id", $ids)) ->orderBy("field");</code>
说明:
此解决方法允许您对 Doctrine 2.2 中的 IN 表达式内的值进行排序,即使存在以下限制order by 子句中的 FIELD 函数。
以上是如何将 MySQL FIELD 函数与 Doctrine 2 的 ORDER BY 子句一起使用?的详细内容。更多信息请关注PHP中文网其他相关文章!