Symfony 2 - запрос на обновление Doctrine ORM не работает

Я пытаюсь обновить таблицу mysql следующим запросом, используя Doctrine. Но таблица не обновляется. Также ниже код не вызывал никаких ошибок. Я совершенно сбит с толку. Если я запускаю запрос, взятый из метода getDQL(), непосредственно в mysql, он показывает 0 строк, обновленных из-за неправильных кавычек. он работает после размещения правильных кавычек для значений в запросе. Нужна помощь, чтобы решить эту загадку.

Поскольку я новичок в доктрине, я буду использовать примеры, приведенные в файле класса querybuilder.

    $support = $this->createQueryBuilder('p')
                    ->update('gcns', 'g')
                    ->set("g.isActive", "0")
                    ->andWhere("g.issn='".$issn."'");

person Rosi Evangelin    schedule 06.04.2016    source источник
comment
это ваш единственный код? Вы выполнили это после?   -  person MouradK    schedule 06.04.2016


Ответы (1)


Вы когда-нибудь выполняли запрос или просто строите его? У вас должно быть что-то вроде этих строк, чтобы выполнить его:

$support->getQuery()->getSingleScalarResult();

Если я запускаю запрос, взятый из метода getDQL(), непосредственно в mysql, он показывает 0 строк, обновленных из-за неправильных кавычек.

getDQL() возвращает DQL, а не SQL, поэтому он будет иметь неправильные кавычки, если вы попытаетесь запустить его непосредственно в MySQL, но это ожидаемо.

Вы не должны объединять $issn в свой запрос. Вместо этого вы должны использовать параметры:

$qb = $this->createQueryBuilder()

$support = $qb->update('gcns', 'g')
   ->set('g.isActive', '0')
   ->andWhere( $qb->expr()->eq('g.issn', ':issn') )
   ->setParameter( 'issn', $issn )
   ->getQuery()->getSingleScalarResult()
;
person Paul    schedule 06.04.2016
comment
Спасибо за решение. Во всяком случае, я решил это сам. - person Rosi Evangelin; 07.04.2016
comment
@RosiEvangelin Хорошо, просто убедитесь, что вы удалили объединенную строку. Выполнение "g.issn='".$issn."'" вместо использования параметра плохо как с точки зрения безопасности, так и с точки зрения производительности. - person Paul; 07.04.2016