4

私は、propelを使用して、1回のphp実行内でDBからデータを強制的に再読み取りする必要があります。私はすでに少しハッキーな解決策を持っています:対応するクラスに対してinit%modelName%を呼び出しますが、もっと良いものが必要です。

そのための単一の呼び出しまたはサービス構成オプションはありますか?インスタンスプール全体を強制終了するようなものです。

サービスについて:symfony2を使用しており、特定の1つのケースでのみキャッシュを必要としないため、そのために別の環境を作成することもできます。

4

2 に答える 2

12

以下を呼び出すことにより、インスタンスのプーリングをグローバルに無効にすることができますPropel::disableInstancePooling()(Propel::enableInstancePooling()はインスタンスのプーリングを有効にするのに役立ちます)。

clearInstancePool()それ以外の場合は、 、 、 などの生成されたメソッドを含む PEER クラスに依存できます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 に答える