2014-11-21 89 views
0

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(); 

这里排名是我想设置

问题IM面临

  • IM无法设置变量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

不幸的是,我不认为在DQL这是可能的,但你可以使用只是普通的SQL与学说。如果你想与Symfony2的实体使用它来看看该createNativeQuery功能http://doctrine-orm.readthedocs.org/en/latest/reference/native-sql.html

,你也应该看看的Doctrine\ORM\Query\ResultSetMapping类,它是用来创建适当的实体出来的结果。

希望这有助于。

Btw。在我看来,你不应该在你的DQL字符串中使用PHP变量,而是使用参数,你可以在这里阅读它们:http://doctrine-orm.readthedocs.org/en/latest/reference/query-builder.html#binding-parameters-to-your-query