在理论和Symfony2的多个更新查询(Multiple update queries in doc

2019-09-16 22:57发布

我试着做这几种方式,但我不能为它找到工作的正确语法。 我的最新尝试低于(在Symfony2的实体库类):

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]

有如下解决方案的疑难杂症。 我也有加入电话冲洗或将开始累积更新栏像这样的“更新答案集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();

Answer 1:

要设置一个变量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撰写查询时,不列名称时使用的字段名。



文章来源: Multiple update queries in doctrine and symfony2