Doctrine 2 查询缓存对我来说有点令人惊讶。我有两个一一对应的更新查询:
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();
}
我用 2 个不同的值(例如 A、B)更新了密码,但用户是相同的:
upd($user, 'A');
upd($user, 'B');
第一个查询真正更新了数据库行。但是第二个在执行后没有对数据库进行任何更改。
为了解决这个问题,我找到了一些解决方法:
$qb->getQuery()->useQueryCache(false)->execute();
禁用 QueryCache 后,两个查询都会更改 DB 行。
所以,问题是:为什么学说在第二个 UPDATE 查询中使用第一个查询缓存?为什么学说使用缓存,而它是两个具有不同参数($passwordHash)的查询?