2011-12-22 66 views
1

我使用sfPropelORMPlugin。 如果我對每個網頁上的一個對象進行操作,則Lazyload是可以的。但是,如果有數百個我會得到數百個單獨的數據庫查詢。我想完全禁用lazyload,或者在那些特別重的頁面上禁用它,以便找到需要的列,但目前還找不到方法。如何在運行時更改Symfony中的模型lazyloadness?

回答

0

添加實用程序方法,以便能夠設置我想要加載的列。對這種類型的數據庫查詢使用「僞列」。我也重寫了水合物()來理解這個「標記」。一切都很好,直到我發現即使數據已經水化,symfony也不會理解它,並且不會讓你按預期使用它。

PS連接從未被認爲是一種選擇,因爲網站是一種高負載。

1

你應該在你建立你的查詢時與你所有的關係join,這樣你就可以在一個查詢中獲得所有數據。請注意,您必須使用joinWithRelation(),其中Relation是一個相關的表名稱。

0

在William Durand的回答中詳細說明,也許你還應該看看Propel函數doSelectjoinAll(),它應該預加載所有與你的關係相關的對象。請記住,這可能是昂貴的,因爲它涉及到內存。

另一種技術是創建一個自定義標準與您需要的連接,然後使用手動水合技術添加到您的基礎對象。我經常這樣做,當我需要的數據是使用聚合或其他列沒有完全映射到對象。有大量的水合物()例子。