我有一个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缓存数组呢?