Я хотел бы обновить несколько записей в db, используя инструкцию WHERE IN с двумя проверками столбцов.
Чистый сырой запрос MySql выглядит примерно так .. и он работает:
UPDATE poll_quota q SET q.count = q.count+1 WHERE q.form_id=14 AND ((q.field_id,q.value) IN (('A',1),('B',1)))
$this->createQueryBuilder("q") ->update() ->set("q.count","q.count+1") ->where("q.form_id=:form_id") ->andWhere("((q.field_id,q.value) IN (:wherein))") ->setParameter(":form_id",$form_id) ->setParameter(":wherein",$where_in) ->getQuery() ->execute() ;
[Syntax Error] line 0, col 103: Error: Expected Doctrine\ORM\Query\Lexer::T_CLOSE_PARENTHESIS, got ',' [1/2] QueryException: UPDATE Edge\PollBundle\Entity\Quota q SET q.count = q.count+1 WHERE q.form_id=:form_id AND ((q.field_id,q.value) IN (:wherein)) +
Attemp, чтобы сделать это так же, также не работает:
[...]->andWhere("((q.field_id,q.value) IN ({$where_in}))")
$ where_in содержит строку:
"('A',1),('B',1)"
DQL не позволяет использовать несколько столбцов в инструкции WHERE IN, поскольку не все СУБД поддерживают его. Вы можете запустить его с необработанным SQL, используя $this->getEntityManager()->getConnection()->executeUpdate()