Я хочу установить переменную в DQL-запрос на основе условия
случай, когда оба значения переменной соответствуют заданной переменной ранга.
запрос 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
Но это не работает.
Как я могу это сделать ?
ИЛИ есть ли способ сделать это
Пожалуйста помоги
К сожалению, я не думаю, что это возможно в DQL, но вы можете использовать простой SQL с Doctrine. взгляните на createNativeQuery
функция http://doctrine-orm.readthedocs.org/en/latest/reference/native-sql.html
Если вы хотите использовать его с Symfony2 Entity, вы также должны взглянуть на Doctrine\ORM\Query\ResultSetMapping
класс, который используется для создания правильных сущностей из результата.
Надеется, что это помогает.
Btw. По моему мнению, вы не должны использовать переменные PHP в вашей строке DQL, а вместо этого работать с параметрами, вы можете прочитать о них здесь: http://doctrine-orm.readthedocs.org/en/latest/reference/query-builder.html#binding-parameters-to-your-query
Других решений пока нет …