Я хотел бы обновить несколько записей в БД, используя оператор 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)) +
Попытка сделать что-то вроде этого тоже не работает:
[...]->andWhere("((q.field_id,q.value) IN ({$where_in}))")
$where_in содержит такую строку:
"('A',1),('B',1)"
->andWhere("q.field_id IN (:wherein)")->andWhere("q.value IN (:wherein)")
? - person qooplmao   schedule 16.07.2015