嗨,我在 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/