我需要使用propel在一次php执行中强制重读数据。我已经有了一些hacky解决方案:为相应的类调用init%modelName%,但想要更好的东西。
是否有任何单个呼叫或服务配置选项?就像杀死整个实例池一样。
关于服务:我们使用symfony2,并且只在一个特定情况下不需要缓存,因此我们可以为此创建独立的环境。
答案 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();