我尝试过多种方式,但我找不到确切的语法。我的最新尝试如下(在Symfony2 Entity Repository类中):
public function updateOrdering($new_order, $evaluation_id)
{
$qb = $this->createQueryBuilder('IddpRplusBundle:Answer');
foreach($new_order as $item){
$id = $item['id'];
$answernr = $item['answernr'];
$q = $qb->update('IddpRplusBundle:Answer a')
->set('a.answernr', $answernr)
->where('a.id = :id')
->getQuery()
->execute()
;
}
}
错误是" 参数号无效:绑定变量数与令牌数不匹配" ..我还想添加第二个where子句
->where('a.evaluation_id = :evaluation_id')
这是mysql表中的外键,但随后错误更改为"无法找到evaluation_id字段"即使它存在于表本身中(评估和答案实体之间的关系是一对多,它也在实体中映射)
有什么想法吗?
[UPDATE]
下面的解决方案中有一个问题。我还必须添加一个flush调用,或者它会开始累积更新字段,如下所示"更新答案集answernr = 1,answernr = 2,其中id = 2"。所以最终的解决方案是:
->set('a.answernr', (int)$answernr + (int)$start)
->where('a.id = :id AND a.evaluation = :evaluation_id ')
->setParameters(array('id' => $id,'evaluation_id' => $evaluation_id))
->getQuery()
->execute()
;
$this->_em->flush();
答案 0 :(得分:3)
您正在为id设置变量,但在执行查询之前不会将其绑定到值。
固定代码:
public function updateOrdering($new_order, $evaluation_id)
{
$qb = $this->createQueryBuilder('IddpRplusBundle:Answer');
foreach($new_order as $item){
$id = $item['id'];
$answernr = $item['answernr'];
$q = $qb->update('IddpRplusBundle:Answer a')
->set('a.answernr', $answernr)
->where('a.id = :id')
->setParameter('id', $id)
->getQuery()
->execute();
}
}
对于“evaluation_id”字段,检查实体类中的名称,在使用DQL编写查询时需要使用字段名称,而不是列名。