6

嗨,我在 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)
    ");

渲染模板期间抛出异常(“[语法错误] line 0, col 122: Error: Expected end of string, got '('")

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

4

2 回答 2

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
");
于 2013-11-08T19:40:22.510 回答
0

您可以使用“index by”返回由您的实体 ID 索引的结果。然后你只需要遍历你的有序数组,并在结果中选择正确的实体。

于 2017-10-13T13:30:54.903 回答