Symfony2 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 UserBundle:User u WHERE
        u.id = 14469 OR
        u.id = 685

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

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

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

最佳答案

FIELD() 函数是 MySQL 特定的,因此不是 Doctrine 2 库的一部分。 您可以使用自定义 DQL 函数,该函数已由 Doctrine 的首席开发人员 (Benjamin Eberlei) 创建。 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
");

关于Symfony2 createQuery 按字段排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19867118/

相关文章:

php - Symfony 4 - Autowiring 整个路径时如何使用服务标签

php - Doctrine 的实体管理器崩溃并停止运行

mysql - 使用混合列数据类型按大小写排序

symfony - 渲染过程中抛出异常?

symfony - 在 Symfony 项目中查找未使用的 TWIG 布局

symfony - symfony 中的 Assets 文件在防火墙后面?

forms - 使用数组/Doctrine2 绑定(bind)并保存带有集合字段的表单

php - 问题持久化嵌套的嵌套嵌入文档

MYSQL - 按从最新到最旧的顺序升序排列时间戳值?

用于消息回复系统的 MySQL Advanced ORDER BY Clause