我尝试以多种方式做到这一点,但我找不到它工作的确切语法。我最近的尝试如下(在 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 表中的外键,但随后错误变为“找不到评估 ID 字段”,即使它存在于表本身中(评估和答案实体之间的关系是一对多的,并且它被映射为实体)
有任何想法吗?
[更新]
下面的解决方案中有一个问题。我还必须添加对刷新的调用,否则它将开始累积更新字段,例如“更新答案集 answernr=1,answernr=2 where 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();