在 Doctrine 2 中使用 MySQL 的 FIELD 函数对结果进行排序
在尝试将 MySQL 的 FIELD 函数合并到 orderBy 子句中时,您遇到了 Doctrine 2 的潜在限制。
假设 Doctrine 2 本身并不支持 FIELD 函数,您有多种选择来使用它:
-
查询修改: 转换查询到本机查询中,这使您可以更好地控制原始 SQL 语法,并允许您直接使用 FIELD 函数。
-
扩展实现: 使用 Doctrine 2 扩展来扩展其功能,例如正如杰里米·希克斯(Jeremy Hicks)所提供的那样。这涉及在 Doctrine 配置中配置扩展并使用自定义字符串函数来访问 FIELD 函数。例如, $doctrineConfig->addCustomStringFunction('FIELD', 'DoctrineExtensionsQueryMysqlField').
-
自定义函数: 创建一个模拟 FIELD 函数行为的自定义函数并将其集成到您的教义查询。这需要实现自定义 DQL 函数并定义其 SQL 实现。
具体解决方案:
在筛选时将 FIELD 函数合并到 orderBy 子句中IN 表达式,建议采用以下方法:
- 使用 SELECT 子句添加包含 FIELD 函数的隐藏字段: select("r, field(r.id, " . implode(", ", $ids) . ") as HIDDEN field")。
- 在 WHERE 子句中应用 IN 表达式来过滤结果。
- 使用 orderBy 子句根据隐藏字段:orderBy("field").
通过在 SELECT 子句中添加 HIDDEN 关键字,可以避免在结果行中包含字段别名。
以上是如何在Doctrine 2的Order By子句中使用MySQL的FIELD函数?的详细内容。更多信息请关注PHP中文网其他相关文章!