使doctrine2更新数据库中的缓存实体

时间:2019-03-21 10:28:14

标签: php caching orm doctrine-orm

假设我有两个过程:

  • 一个:基于来自同一表的现有条目的信息在数据库中创建条目。 (长期运行,始终轮询)
  • 二:另一个读取,操作和持久保存它们的过程。 (轮询,工作,持续,退出)

因此,过程1需要查询第二个过程更改的条目。 但是,无论设置什么缓存选项,我都会从存储库中获取过时的对象。教义不会刷新其已在缓存中拥有的实体。

在查询使之起作用之前立即使用$entityManager->clear(),但是这给我带来了一种不好的感觉,因为这似乎不是应该使用的学说。

由于我是该理论的新手,因此请考虑一些显而易见的答案。

如何获取有关使用数据库中的新属性刷新缓存对象的学说?


创建EntityManager

$config = Setup::createAnnotationMetadataConfiguration(
        '/path/to/my/models',
        true,
        null,
        null,
        false
    );
$entityManager= EntityManager::create(
    $dbConfig,
    $config
);

存储库功能: (扩展EnitityRepository的存储库类的成员)

    public function findThisAndThat(): array
    {
        $qb = $this->_em->createQueryBuilder();
        $qb->select('t')
           ->from('Corp\MyProject\Models\Task', 't')
           ->orderBy('t.priority', 'DESC');
        return $qb->getQuery()
                  ->getResult();
    }

查找对象

$taskRepository = $this->entityManager->getRepository(Task::class);
$tasks          = $taskRepository->findThisAndThat();

我尝试使用以下内容:

$config->setSecondLevelCacheEnabled(false);
$query->setCacheMode(Cache::MODE_REFRESH)
$query->useResultCache(false)
$query->setCacheable(false)

0 个答案:

没有答案