清除推进缓存(实例池)

时间:2012-07-10 10:15:55

标签: symfony propel

我需要使用propel在一次php执行中强制重读数据。我已经有了一些hacky解决方案:为相应的类调用init%modelName%,但想要更好的东西。

是否有任何单个呼叫或服务配置选项?就像杀死整个实例池一样。

关于服务:我们使用symfony2,并且只在一个特定情况下不需要缓存,因此我们可以为此创建独立的环境。

2 个答案:

答案 0 :(得分:12)

您可以通过调用Propel::disableInstancePooling()全局禁用实例池(Propel::enableInstancePooling()对于启用实例池很有用。)

否则,您可以依赖包含clearInstancePool()clearRelatedInstancePool()等生成方法的PEER类。

答案 1 :(得分:0)

我需要更新相关的对象,并发现应该调用clear%modelName%

init%modelName%删除所有条目,并且永远无法读取相关的条目。 clear[Related]InstancePool没有帮助。

$foo = FooQuery->create()->findOne();
// meanwhile somebody else updated DB and Propel don't know about that:
mysql_query("INSERT INTO `foo_bars`, (`foo_id`, `bar_id`) VALUES (".$foo->getId().", 1)");
// here we need some magic to force Propel re-read relation table.
$foo->clearFooBars();
// now entries would be re-read
$foo->getFooBars();