6

こんにちは、phpmyadmin でこのクエリを書きましたが、gr8 で動作します。

SELECT u.* FROM users AS u WHERE
        u.id = 14469 OR
        u.id = 685

        ORDER BY u.id, field(u.id, 14469, 685)

しかし、symfony2 で書く必要があります。どのように見えますか?これは私にエラーを投げているので:

    $query=$this->_em->createQuery("SELECT u FROM UserBundle:User u WHERE
        u.id = 14469 OR
        u.id = 685

        ORDER BY u.id, field(u.id, 14469, 685)
    ");

テンプレートのレンダリング中に例外がスローされました ("[構文エラー] 行 0、列 122: エラー: 文字列の末尾が予期され、'('") が取得されました)

それとも許可されていないので、ドクトリン拡張機能をインストールして使用する必要がありますか?

4

2 に答える 2

7

このFIELD()関数は MySQL 固有であるため、Doctrine 2 ライブラリの一部ではありません。Doctrine の主任開発者 (Benjamin Eberlei) によって既に作成されているカスタム DQL 関数を使用できます。https://github.com/beberlei/DoctrineExtensions/ .

FIELD()また、DQL では関数を order by で使用できないため、関数を非表示として定義する必要があると確信しています。非表示としてマークすると、関数の出力が結果セットで水和されなくなります。次の行の何か:

$query=$this->_em->createQuery("SELECT u, field(u.id, 14469, 685) as HIDDEN field FROM UserBundle:User u WHERE
    u.id = 14469 OR
    u.id = 685
    ORDER BY u.id, field
");
于 2013-11-08T19:40:22.510 に答える