Symfony2按字段创建查询订单

Symfony2按字段创建查询订单,symfony,doctrine-orm,sql-order-by,field,createquery,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 U

嗨,我用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)
    ");
在呈现模板期间引发了异常(“[Syntax Error]第0行,第122列:错误:字符串的预期结尾,get'(')”

或者这是不允许的,我必须安装并使用一些条令扩展?

函数是特定于MySQL的,因此不是条令2库的一部分。 您可以使用定制的DQL函数,该函数已经由条令的首席开发人员(Benjamin Eberlei)创建

另外,我非常确定您需要将
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
");

您可以使用“index by”返回一个按实体id索引的结果。然后您只需在有序数组上循环,并在结果中选择正确的实体。

Hmm似乎很复杂。好吧,这就是我需要知道的(函数是特定于MySQL的)其实并没有那么复杂。例如,如果您使用composer,只需向DoctrineExtensions库添加一个依赖项,并添加一行symfony配置来注册自定义DQL函数。嗯,您能帮我一下吗?如果我想通过composer安装它。我知道我应该添加类似于e:“gedmo/doctrine extensions”:“master dev”,“stof/doctrine extensions bundle”:“dev master”,但我不确定在这种情况下会发生什么。我正在查看文档,但没有任何关于通过composer安装它的内容,或者是吗?您可以查看以找到包名。它是“beberlei/DoctrineExtensions”。因此,您可以将“beberlei/DoctrineExtensions”:“dev master”添加到您的需求中,确保您还输入了“最小稳定性”:“dev”。如果您想要标记的(稳定)版本,可以使用“beberlei/DoctrineExtensions”:“v0.1”。我不确定是否获得了最小稳定性句子。但我已将其放在composer.json文件中:“beberlei/DoctrineExtensions”:“dev master”,然后运行install what抛出错误:问题1-symfony/framework standard edition 2.1.x-dev的安装请求->symfony/framework standard edition可满足[2.1.x-dev]-symfony/framework standard edition 2.1.x-dev需要beberlei/doctrineextensions dev master->找不到匹配的包。我有symfony2.1.7