学说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');
第一个查询真正更新了数据库行。但是第二个只是在执行后没有对DB进行任何更改。
试图解决这个问题,我发现了一些解决方法:
$qb->getQuery()->useQueryCache(false)->execute();
禁用querycache两个查询都会更改db行。
那么,问题是:为什么Doctrine在第二个更新查询中使用第一个查询缓存?为什么学说是两个具有不同参数($ passwordhash)的查询时使用缓存?
问题。这是学说2 ORM代码中的问题。我的$用户实体具有继承,因此更新使用Doctrine orm Query exec MultiableUpdateExecutor。在该执行人中:
//FIXME (URGENT): With query cache the parameter is out of date. Move to execute() stage.
来源。
因此,目前唯一的解决方法是禁用查询高速缓存以获取多个更新:
$qb->getQuery()->useQueryCache(false)->execute();
我为此创建了新的错误。