2012-10-14 55 views
1

我是Yii的新手。目前,我正在學習Active Record延遲加載和熱切加載。我搜索了互聯網,但找不到任何好的文章,解釋在什麼情況下我應該使用這些加載方法。這裏的任何人都可以解釋它?使用Yii Active Record懶惰加載或渴望加載的最佳條件?

謝謝。

+0

這一切都取決於你想要做什麼。延遲加載定義爲「推遲對象的初始化直到需要它的位置」 因此,如果您正在進行類似無限滾動的操作,則只會在用戶滾動到的情況下使用數據集創建Active Record對象頁面上的某個點。 CActiveDataProvider中有類方法,它將幫助您確定數據集中的哪個位置(例如,查找分頁) –

回答

0

這是關於n+1 problem的全部內容。從Yii guide

默認情況下,單一的JOIN語句將被生成和 參與預先加載的所有關係執行。如果主表的 設置了其LIMIT或OFFSET查詢選項,則將首先單獨查詢它, 後跟另一個SQL語句,該語句將返回其所有相關的 對象。以前在版本1.0.x中,缺省行爲是 如果一個渴望加載涉及N HAS_MANY或MANY_MANY關係,將會有N + 1個SQL語句。