Doctrine 2 쿼리 캐싱은 나에게 조금 놀라운 것입니다.Doctrine 쿼리 캐시 및 업데이트
function upd($user, $passwordHash) {
$qb = $this->entityManager->createQueryBuilder()
->update(UserEntity::__class, 'u')
->set('u.password', '?1')
->where('u = ?0')
->setParameters(array($user, $passwordHash));
$qb->getQuery()->execute();
}
내가 갱신이 개 다른 값 (. 예 A, B)와 비밀번호 만, 사용자가 동일한했다 : 나는 하나씩 따라이 업데이트 쿼리를했다
upd($user, 'A');
upd($user, 'B');
첫 번째에게 쿼리는 실제로 데이터베이스 행을 업데이트합니다. 그러나 두 번째는 실행 후 DB에 변경 사항을 적용하지 않았습니다. DB 행을 변경 QueryCache 두 개의 쿼리를 해제 한 후
$qb->getQuery()->useQueryCache(false)->execute();
이 문제를 해결하기 위해 노력
는나는 몇 가지 해결 방법을 발견했다.
따라서 질문은 다음과 같습니다. 왜 doctrine은 두 번째 UPDATE 쿼리에서 첫 번째 쿼리 캐시를 사용합니까? 그리고 doctrine이 다른 매개 변수 ($ passwordHash)를 가진 두 개의 쿼리 인 동안 캐시를 사용하는 이유는 무엇입니까?
Doctrine2 ORM 2.3.3 이상부터 수정 됨 – ocornu