Symfony2按字段创建命令

时间:2013-11-08 19:33:11

标签: symfony doctrine-orm sql-order-by field createquery

嗨,我在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栏:错误:字符串的预期结束,得到'('”)

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

2 个答案:

答案 0 :(得分: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
");

答案 1 :(得分:0)

您可以使用"索引"返回由您的实体ID索引的结果。然后,您只需循环遍历有序数组,并在结果中选择正确的实体。