Doctrine 1.2:禁用缓存

4
这个问题类似,我在使用Doctrine缓存/填充查询结果的关系时遇到了一些问题。
现在我知道可以通过调用refresh/refreshRelated来解决这个问题,但是否有一种方法可以禁用表格/临时的填充缓存呢? 特别是在使用联接选择时,例如以下示例代码:
$result2 = Doctrine_Query::create()
           ->leftJoin('s.School sc')
           ->from('Student s')
           ->execute();

您真的希望Doctrine使用您的联接数据,而不是使用先前选择的缓存水合结果。

有没有办法做到这一点?

提前致谢!

2个回答

2

我认为默认情况下应该将查询结果与数据进行关联,除非您已更改 Doctrine_Core::ATTR_HYDRATE_OVERWRITE。 您可以使用以下命令检查其值:

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

当您调用 refresh() 方法时,它会强制将这个值设置为 true,然后再次执行查询,并恢复相应的设置。如果该值本来就是 false,您可以使用 $doctrineManager->setAttribute 方法进行更改。

1
ATTR_HYDRATE_OVERWRITE默认情况下是启用的,但不幸的是并不能解决这个问题。 - Peter

0

我认为你使用refreshRelated的解决方案还不错,但如果你不需要这些项目在缓存中,你可以进行设置

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

通过这样做,Doctrine会在每次查询结束时自动调用free()函数,这样它就不会缓存查询结果,并且还能稍微降低内存占用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接