将变量设置为DQL查询

时间:2014-11-21 11:52:48

标签: php mysql doctrine-orm dql

  • 我想根据条件将变量设置为DQL查询

  • 两个varibale值都匹配set变量rank的情况。

dql查询

 $q=$this->em->createQuery("select distinct u.id,u.city,u.country,u.designation FROM Entities\User u JOIN Entities\EventVisitor evt_vstr WITH evt_vstr.user = u.id WHERE (
                           CASE
                            WHEN $a =u.designation THEN SET @rank=1
                            WHEN $b =u.country THEN SET @rank=2
                            WHEN $c =u.city THEN SET @rank=3
                            WHEN $d =u.company THEN @rank=4
                            END) order by @rank")


                             ->setFirstResult($i)
                             ->setMaxResults($max_result);
                              $results = $q->getResult();

这里排名是我试图设置的变量

面临的问题

  • 我无法在dql中设置变量。

错误日志

 PHP Fatal error:  Uncaught exception 'Doctrine\\ORM\\Query\\QueryException' with message 'select distinct u.id, u.city,u.country,u.designation FROM Entities\\User u JOIN Entities\\EventVisitor evt_vstr WITH evt_vstr.user = u.id \n\t \t\t\t\t\tWHERE (\n\t\t\t\t\t\t\t\t\tCASE\n\t\t\t\t\t\t\t\t\t\t\t\tWHEN Co-founder =u.designation THEN SET @rank=1\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\tEND   ) ' in /home/india/public_html/serve-trade-com/application/libraries/Doctrine/ORM/Query/QueryException.php:39\nStack

但它不起作用。

我该怎么做?

或者有没有办法做到这一点

请帮忙

1 个答案:

答案 0 :(得分:2)

不幸的是,我不认为DQL中可能存在这种情况,但您可以使用纯粹的SQL与Doctrine。看看createNativeQuery function

如果要将它与Symfony2实体一起使用,您还应该查看Doctrine\ORM\Query\ResultSetMapping类,该类用于在结果中创建正确的实体。

希望这有帮助。

顺便说一下。在我看来,你不应该在你的DQL字符串中使用PHP变量,而是使用参数,你可以阅读它们here