Doctrine 2 で MySQL の FIELD 関数を使用した結果の順序付け
MySQL の FIELD 関数を orderBy 句内に組み込もうとして、Doctrine 2 の潜在的な制限に遭遇しました。
Doctrine 2 が FIELD 関数をネイティブにサポートしていないことが事実であると仮定すると、それを利用するにはいくつかのオプションがあります:
-
クエリの変更: クエリを変換するこれにより、生の SQL 構文をより詳細に制御でき、FIELD 関数を直接使用できるようになります。
-
拡張機能の実装: 機能を拡張する Doctrine 2 拡張機能を採用します。ジェレミー・ヒックスが提供したもののように。これには、Doctrine 設定内で拡張機能を設定し、カスタム文字列関数を使用して FIELD 関数にアクセスすることが含まれます。たとえば、$doctrineConfig->addCustomStringFunction('FIELD', 'DoctrineExtensionsQueryMysqlField').
-
カスタム関数: FIELD 関数の動作をエミュレートするカスタム関数を作成し、それをあなたの教義の質問。これには、カスタム DQL 関数を実装し、その SQL 実装を定義する必要があります。
具体的な解決策:
フィルター処理中に orderBy 句に FIELD 関数を組み込むには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 中国語 Web サイトの他の関連記事を参照してください。