我想将原则中的一个字段设置为 null,这是句子
$em = $this->getDoctrine()->getManager();
$qb = $em->createQueryBuilder();
$query = $qb->update('Model\Example', 'u')->set('u.deletedAt', ':deletedAt')
->where("u.id IN (:ids)")->setParameter('deletedAt', null)
->setParameter('ids', $ids)
->getQuery();
$query->execute();
我认为这段代码应该可以完成这项工作,但我收到了这个异常
执行 'UPDATE example SET returned_at = ? 时发生异常
WHERE (id IN (?)) AND (example.deleted_at IS NULL)' 带参数
[null,“5,6”]:SQLSTATE [22P02]:无效的文本表示:7 错误:
la sintaxis de entrada no es válida para integer: «5,6»
首先,为什么学说要添加 AND (example.deleted_at IS NULL) 我做错了什么?
您原来的查询看起来应该有效。我复制并测试了:
$em = $this->getService('doctrine.orm.entity_manager');
$qb = $em->createQueryBuilder();
$qb->update('Cerad\Bundle\PersonBundle\Entity\Person','person');
$qb->set('person.verified',':verified');
$qb->setParameter('verified',null);
$qb->where('person.id IN (:ids)');
$qb->setParameter('ids',array(1,2,3));
echo $qb->getQuery()->getSql(); // UPDATE persons SET verified = ? WHERE id IN (?)
$qb->getQuery()->execute();
按预期工作。
您确定复制/粘贴了确切的代码吗?事后没有编辑吗?验证您的 ids 数组确实是整数数组。这是我唯一能看到可能存在问题的地方。并确保您的错误来自您发布的代码。也许还有其他事情发生?尝试将代码隔离在命令对象中。当然,deletedAt 的 is nullable 设置为 true 吗?
对于这种情况,没有真正需要使用 expr 对象。原则 2 正确处理 IN 语句的数组。
=====================================
我怀疑你有 $ids = '5,6'?尝试将其设置为: $ids = array(5,6);尽管即使使用字符串,我也看不出它如何扰乱查询。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)