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>
制限事項: FIELD Order By Clause の制限
拡張機能を通じて FIELD 機能を有効にしても、Doctrine 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 関数。
以上がDoctrine 2 の ORDER BY 句で MySQL FIELD 関数を使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。