2011-12-22 5 views
1

私はsfPropelORMPluginを使用します。 Webページごとに1つのオブジェクトを操作すると、Lazyloadは正常です。しかし何百というものがあれば、私は何百もの別々のDBクエリーを取得します。私はlazyloadを完全に無効にするか、特に重いページで必要な列を無効にしたいが、これまでのところ見つからなかった。Symfonyの実行時にモデルlazyloadnessを変更するには?

答えて

0

読み込みたい列を設定できるようにピアにユーティリティメソッドを追加しました。このタイプのDBクエリに "疑似カラム"を使用する。また、私はこの "マークアップ"を理解するために水和物()をオーバーライドしました。データが水和されているにもかかわらず、symfonyはそれを理解せず、あなたが意図したとおりに使用することができないことを知るまで、すべてがうまくいっていました。

サイトが負荷が高いため、PS結合はオプションとして考えられませんでした。

1

あなたはクエリを作成するときにすべての関係をjoinする必要があります。そうすれば、すべてのデータを1つのクエリで取得できます。注意:joinWithRelation()を使用する必要があります。Relationは、関連するテーブル名です。

0

ウィリアム・デュランの答えを精緻化すると、あなたの関係に関連するすべてのオブジェクトをあらかじめロードする必要があるPropel関数doSelectjoinAll()を見てください。メモリに関連しているので、これは高価になる可能性があることを覚えておいてください。

もう1つの方法は、必要な結合でカスタム条件を作成し、次に手動ハイドレート手法を使用して基底オブジェクトに追加する方法です。私は、必要なデータが、オブジェクトに正確にマッピングされていない集計や他の列を使用している場合、これを頻繁に行います。ハイドレートの例はたくさんあります。