原则查询缓存和更新



学说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();

我为此创建了新的错误。

相关内容

  • 没有找到相关文章

最新更新