여러 가지 방법으로 시도했지만 올바르게 작동하는 구문을 찾을 수 없습니다. 내 최신 시도의 (a Symfony2 엔티티 저장소 클래스) 다음과 같습니다 :doctrine과 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 절 외국 MySQL의 테이블에 키하지만 오류 변경은 테이블 자체 (평가의 관계에있는 경우에도 "를 evaluation_id 필드를 찾을 수 없습니다"하는 것입니다
->where('a.evaluation_id = :evaluation_id')
및 답변 엔티티는 일대 다 많고 엔티티에서도 매핑됩니다.)
아이디어가 있으십니까?
[업데이트]
아래 해결 방법에 문제가 있습니다. 나는 또한 flush에 대한 호출을 추가해야했는데, "update answer_required = 1, answernr = 2 where id = 2"와 같은 업데이트 필드를 누적하기 시작할 것입니다. 그래서 최종 솔루션이었다 : 당신은 ID에 대한 변수를 설정,하지만 당신은 쿼리를 실행하기 전에 값으로 바인딩되지 않습니다
->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();
고마워요. 결국 : -> ('a.id = : id AND a.evaluation = : evaluation_id') -> setParameters (array ('id'=> $ id , 'evaluation_id'=> $ evaluation_id)) – Sofia