Symfony2按字段创建命令

Blo*_*kas 5 field sql-order-by createquery symfony doctrine-orm

嗨,我在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)
Run Code Online (Sandbox Code Playgroud)

但我需要在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)
    ");
Run Code Online (Sandbox Code Playgroud)

在渲染模板期间抛出异常("[语法错误]第0行,第122列:错误:字符串的预期结束,得到'('")

或者它不允许,我必须安装和使用一些学说扩展?

Bra*_*sen 7

FIELD()函数是MySQL特定的,因此不属于Doctrine 2库.您可以使用自定义DQL函数,该函数已由Doctrine(Benjamin Eberlei)的首席开发人员创建.https://github.com/beberlei/DoctrineExtensions/.

另外我很确定你需要将FIELD()函数定义为隐藏,因为你不能在DQL中按顺序使用函数.将其标记为隐藏将阻止函数输出在结果集中水合.有点像:

$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
");
Run Code Online (Sandbox Code Playgroud)