在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中文網其他相關文章!