2011-06-21 15 views
4

thisの質問と同様に、私はdoctrineがクエリの結果の関係をどのようにキャッシュ/水和するかにいくつか問題があります。Doctrine 1.2:キャッシングを無効にする

ここでは、refresh/refreshRelatedを呼び出すことで問題を解決できることがわかりましたが、一時的にテーブルのハイドレーションキャッシュを無効にする方法はありますか?使用して特に は例のコードになることを選択し、そのような中で参加する:

$result2 = Doctrine_Query::create() 
      ->leftJoin('s.School sc') 
      ->from('Student s') 
      ->execute(); 

あなたは本当にDoctrineは前回の選択から、キャッシュされた水和した結果を用いて、あなたの参加の代わりからのデータを使用します。

これを行う方法はありますか?

ありがとうございます!

答えて

2

Doctrine_Core::ATTR_HYDRATE_OVERWRITEを変更していない限り、デフォルトでクエリ結果に水分が含まれているはずです。あなたが値を確認することができます:あなたはリフレッシュ()を呼び出すと

$doctrineManager = Doctrine_Manager::getInstance(); 
$val = $doctrineManager->getAttribute(Doctrine::ATTR_HYDRATE_OVERWRITE); 

、それは、この値をtrueに強制し、再度クエリを実行し、終了後に設定を復元します。あなたが偽である場合は、$doctrineManager->setAttribute

+1

ATTR_HYDRATE_OVERWRITEはデフォルトで有効になっていますが、残念ながら問題は解決しません – Peter

0

あなたの解決策は大丈夫だと思いますが、キャッシュにこれらの項目が必要ないと思います。あなたはこれにより

Doctrine_Manager::connection()->setAttribute(Doctrine_Core::ATTR_AUTO_FREE_QUERY_OBJECTS, true); 

を設定することができ、その結果をキャッシュしないだろう、とも少し下のメモリフットプリントを維持しますので、Doctrineは自動的に、最後に各クエリ上)(フリーコールします。

関連する問題