2014-11-21 88 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