在 Doctrine 2 中透過 MySQL FIELD 函數排序
Doctrine 2 本身不支援開箱即用的 MySQL FIELD 函數。要利用它,您可以利用擴充功能提供的自訂字串函數。
DoctrineExtensions 解決方案:
DoctrineExtensions 函式庫包含一個名為「FIELD」的自訂字串函數,該函數模擬MySQL 欄位函數。若要實現此功能,請新增以下配置:
<code class="php">$doctrineConfig = $this->em->getConfiguration(); $doctrineConfig->addCustomStringFunction('FIELD', 'DoctrineExtensions\Query\Mysql\Field');</code>
用法:
FIELD 函數可以在 SELECT、WHERE 和 BETWEEN 子句中使用。雖然它不能直接在ORDER BY 中使用,但解決方法是在SELECT 子句中新增一個附加欄位並按該欄位排序:
<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>
透過在SELECT 子句中指定HIDDEN,您可以避免出現附加欄位出現在結果行中。這允許您使用 Doctrine 2.2 在 IN 表達式中有效地對值進行排序。
以上是如何使用 Doctrine 2 中的 MySQL 的 FIELD 函數對結果進行排序?的詳細內容。更多資訊請關注PHP中文網其他相關文章!