Doctrine 1.2:禁用缓存

时间:2011-06-21 09:33:03

标签: php doctrine doctrine-1.2

this问题类似,我对如何缓解/保持查询结果关系的问题产生了一些问题。

现在我知道我可以通过调用refresh / refreshRelated来解决问题,但有没有办法暂时禁用表的水合缓存? 特别是在select中使用连接时,示例代码变为:

$result2 = Doctrine_Query::create()
           ->leftJoin('s.School sc')
           ->from('Student s')
           ->execute();

你真的希望Doctrine使用你加入的数据,而不是使用之前选择的缓存水合结果。

有没有办法做到这一点?

提前致谢!

2 个答案:

答案 0 :(得分:2)

我认为默认情况下它应该与查询结果保持一致,除非您更改了Doctrine_Core::ATTR_HYDRATE_OVERWRITE。您可以使用以下方法检查值:

$doctrineManager = Doctrine_Manager::getInstance();
$val = $doctrineManager->getAttribute(Doctrine::ATTR_HYDRATE_OVERWRITE); 

当您调用refresh()时,它会强制此值为true,并再次执行查询,然后恢复该设置。如果您的情况恰好是假的,可以使用$doctrineManager->setAttribute

进行更改

答案 1 :(得分:0)

我认为你的refreshRelated解决方案没问题,但如果你不需要缓存中的这些项目。你可以设置

Doctrine_Manager::connection()->setAttribute(Doctrine_Core::ATTR_AUTO_FREE_QUERY_OBJECTS, true );

这样,Doctrine会在每个查询结束时自动调用free(),因此不会缓存其结果,也会使内存占用率降低一些。