在Symfony中更新Doctrine Cache值

时间:2015-07-12 08:24:24

标签: php symfony caching doctrine-orm doctrine

我有一个Symfony标准分发应​​用程序,并使用Doctrine的查询构建器和结果缓存来加速数据库查询。我还为我的所有缓存分配了唯一的ID,例如

...

->getQuery()
->useResultCache(true, 2592000, 'single_product_query_id_'.$id)
->getOneOrNullResult();

...

当产品字段更改时,我可以使用

删除此特定缓存

...

$em = $this->getDoctrine()->getManager();
$cacheDriver = $em->getConfiguration()->getResultCacheImpl();
$cache = $cacheDriver->fetch('single_product_query_id_'.$id);
if($cache){
    $cacheDriver->delete('single_product_query_id_'.$id);
}

...

删除缓存显然会立即显示更改,但我发现这种方法很浪费,因为在我的控制器中我已经使用doctrine将最新数据保存在我的数据库中,所以我决定更新我的缓存而不是删除它。这就是我的挑战所在,因为除了保存缓存的代码之外,文档还不清楚如何做到这一点

...

$cacheDriver->save('single_product_query_id_'.$id, $new_cache, $new_lifetime);

...

所以我通过将缓存作为变量$ cache传递给twig模板并通过var dump查看来深入挖掘。它看起来像这样

...

array (size=2)
  'SELECT d0_.id AS id_0, d0_.title AS title_1, d0_.imagepath AS imagepath_2, d0_.description AS description_3,.......................
 array (size=1)
      0 => 
        array (size=57)
          'id_0' => string '1' (length=1)
          'title_1' => string ''Tasty Thursday'!' (length=17)
          'imagepath_2' => string 'main.jpeg' (length=9)
          'description_3' => string 'this and every Thursday, buy a 2kg forest cake and get a 1kg fruity forest cake FREE!!!' (length=87)

..............................

我不知道doctrine如何生成这个多维数组,我想得到这个函数,以便我可以正确填充我的缓存进行更新。

目前,我通过var转储我的缓存来成功更新我的缓存,以找出我需要更新哪一行然后遍历数组。但每当我得到一个新想法并向实体添加新行时,我必须重复此过程,特别是如果此实体已连接到产品表。

所以我的问题是,如何从查询结果或更好的实体手动构建一个doctrine缓存数组呢?

0 个答案:

没有答案