これをいくつかの方法で実行しようとしましたが、機能するための正確な構文が見つかりません。私の最新の試みは以下のとおりです (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()
;
}
}
エラーは「無効なパラメーター番号: バインドされた変数の数がトークンの数と一致しません」..また、2 つ目の where 句を追加したいと思います
->where('a.evaluation_id = :evaluation_id')
これはmysqlテーブルの外部キーですが、テーブル自体に存在するにもかかわらず、エラーは「評価IDフィールドが見つかりません」に変わります(評価エンティティと回答エンティティの関係は1対多であり、エンティティも同様)
何か案は?
[アップデート]
以下のソリューションには落とし穴がありました。また、フラッシュへの呼び出しを追加する必要がありました。そうしないと、「update answer set 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();