我有一个来自存储库的奇怪代码 “Ocramius(一个Doctrine2 devel)也在这里说https://groups.google.com/d/msg/doctrine-user/RIeH8ZkKyEY/HnR7h2p0lCQJ”
public function findAll()
{
/* @var $query \Doctrine\ORM\Query */
$query = $this->getEntityManager()->createQuery();
if ($query->getQueryCacheDriver()->contains('cache_key')) {
return $query->getQueryCacheDriver()->fetch('cache_key');
}
$query = $this->getEntityManager()
->createQuery(
'SELECT c FROM AppBundle:Culture c'
);
try {
$results = $query->getResult();
$query->getQueryCacheDriver()->save('cache_key', $results, 300);
return $results;
} catch (\Doctrine\ORM\NoResultException $e) {
return null;
}
}
我不想使用$ query-> useResultCache(true,60,'another_cach_key');因为它解析了请求'SELECT c FROM AppBundle:Culture c',这降低了性能。所以我决定使用QueryCacheDriver。
但要得到它我必须创建空Query! $ query = $ this-> getEntityManager() - > createQuery();
对于控制器中的失效
$em = $this->getDoctrine()->getManager();
$em->persist($culture);
$em->flush();
// cache invalidation!
$this->getDoctrine()->getEntityManager()->createQuery()->
getQueryCacheDriver()->delete('cache_key');
我觉得这段代码闻起来很香。但不知道如何解决它!有人可以建议最佳实践吗?
一般来说,我希望存储我的数据并在某些事件中使其无效。