我想根据条件将变量设置为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();
这里排名是我试图设置的变量
面临的问题
错误日志
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
但它不起作用。
我该怎么做?
或者有没有办法做到这一点
请帮忙
答案 0 :(得分:2)
不幸的是,我不认为DQL中可能存在这种情况,但您可以使用纯粹的SQL与Doctrine。看看createNativeQuery
function。
如果要将它与Symfony2实体一起使用,您还应该查看Doctrine\ORM\Query\ResultSetMapping
类,该类用于在结果中创建正确的实体。
希望这有帮助。
顺便说一下。在我看来,你不应该在你的DQL字符串中使用PHP变量,而是使用参数,你可以阅读它们here。