这是根据关于如何清除缓存的 Doctrine2 文档。我什至不确定这是否是您想要的,但我想这是可以尝试的。
Doctrine2 的缓存驱动程序有不同级别的删除缓存条目。
您可以通过直接 id、使用正则表达式、后缀、前缀和普通删除缓存中的所有值来删除
所以要删除你所做的一切:
$deleted = $cacheDriver->deleteAll();
要按前缀删除,你会这样做:
$deleted = $cacheDriver->deleteByPrefix('users_');
我不确定 Doctrine2 是如何命名他们的缓存 id 的,所以你必须挖掘它。
删除缓存的信息在这里:http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/caching.html#deleting
要获取缓存驱动程序,您可以执行以下操作。它没有在文档中描述,所以我只是稍微跟踪了一下代码。
我假设您在此示例中有一个实体管理器实例:
$config = $em->getConfiguration(); //Get an instance of the configuration
$queryCacheDriver = $config->getQueryCacheImpl(); //Gets Query Cache Driver
$metadataCacheDriver = $config->getMetadataCacheImpl(); //You probably don't need this one unless the schema changed
或者,我想您可以将 cacheDriver 实例保存在某种注册表类中并以这种方式检索它。但取决于你的喜好。就我个人而言,我尽量不要过多地依赖注册表。
您可以做的另一件事是告诉您正在执行的查询不要使用结果缓存。再说一次,我认为这不是你想要的,只是把它扔在那里。主要是您似乎还不如完全关闭查询缓存。那是除非它只是一些您不想使用缓存的特定查询。
此示例来自文档:http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/caching.html#result-cache
$query = $em->createQuery('select u from \Entities\User u');
$query->useResultCache(false); //Don't use query cache on this query
$results = $query->getResult();