我需要在一次 php 执行中使用 propel 强制从 DB 重新读取数据。我已经有一个有点老套的解决方案:为相应的类调用 init%modelName%,但想要更好的东西。
是否有任何单一的呼叫或服务配置选项?就像杀死整个实例池一样。
关于服务:我们使用 symfony2 并且仅在一种特定情况下不需要缓存,因此我们甚至可以为此创建单独的环境。
您可以通过调用全局禁用实例池:(Propel::disableInstancePooling()
对于Propel::enableInstancePooling()
启用实例池很有用)。
否则,您可以依赖包含生成方法的 PEER 类,如clearInstancePool()
, 和clearRelatedInstancePool()
.
我需要更新相关的对象,发现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();