4

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

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

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

4

2 回答 2

12

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

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

于 2012-07-11T17:53:29.233 回答
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();
于 2012-11-06T16:03:20.857 回答