met*_*rez 6 php doctrine query-builder symfony doctrine-orm
我想将null设置为doctrine中的一个字段,这里是句子
$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();
Run Code Online (Sandbox Code Playgroud)
我认为这段代码应该可以完成这项工作,但是我得到了这个例外
执行'UPDATE example SET deleted_at =?时发生异常?WHERE(id IN(?))AND(example.deleted_at IS NULL)'with params [null,"5,6"]:SQLSTATE [22P02]:无效的文本表示:7错误:la sintaxis de entrada noesválidaparainteger :«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();
Run Code Online (Sandbox Code Playgroud)
按预期工作.
您确定要复制/粘贴确切的代码吗?事后没有编辑?验证你的id数组确实是一个整数数组.这是我可以看到可能存在问题的唯一地点.并确保您的错误来自您发布的代码.也许其他事情正在发生?尝试在命令对象中隔离代码.当然已删除它是否可以为空设置为真?
在这种情况下,没有必要使用expr对象.Doctrine 2正确处理IN语句的数组.
====================================
我怀疑你有$ ids ='5,6'?尝试将其设置为:$ ids = array(5,6); 虽然即使有一个字符串,我也看不出它是如何弄乱查询的.
当你用PHP空脚本设置值时,教义是不理解的,因为在转换到原生sql时,他不会用空值作为字符串替换空值,所以要解决,将空值作为字符串传递
$qb->set('q.deletedAt','NULL');
Run Code Online (Sandbox Code Playgroud)
小智 0
问题是你的 $ids 是一个字符串。你(们)能做到:
$arrayOfIds = explode(",", $ids);
更新查询后:
->setParameter('ids', $arrayOfIds)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11611 次 |
| 最近记录: |