2012-10-25 28 views

回答

38

資源模型都包含對象從數據存儲中獲取數據的代碼。實際上,這意味着資源模型是包含SQL構建和獲取代碼的對象,以及連接到主Magento數據庫的對象的引用。

模型是包含數據庫不可知代碼的對象,用於與「類型」數據進行交互。在傳統的數據建模術語中,模型對象包含特定類型對象(類型對象,即產品,客戶等)的業務邏輯。

重要:除了上面的定義,Magento代碼的一部分使用「模型」作爲通用對象,包含與數據無關的業務邏輯。這些「模型」應該被認爲是簡單的舊對象,通過Magento工廠模式實例化。從Mage_Core_Model_Abstract繼承的模型是前者 - 不是後者的模型。這篇文章假定「模型」是指前者。我也開始將這些稱爲Magento的CRUD models

集合是一個對象,它包含提取模型對象的組(集合,數組,列表等)的代碼。由於它生成SQL來執行此操作,因此它也被視爲一種資源模型,並使用Mage::getResourceModel方法進行實例化(儘管集合對象從不同於普通資源模型的類鏈繼承而來,但這些不是您正在尋找的設計模式) 。集合對象還實現了某些標準的PHP接口,並且可以在foreach循環中用於遍歷其結果。

Magento模型對象包含對資源模型的引用,該資源模型用於加載其數據。每個模型對象都有一個單獨的資源模型對象。即產品模型具有產品資源模型。

Magento模型對象也可以用來實例化一個集合對象。集合對象也被鍵入以匹配其模型對象。產品模型可用於實例化產品集合對象。

集合對象創建SQL以獲取對象的組(集合,數組,列表等),還包含將數據分配給主模型對象的代碼。由於此代碼與模型的資源模型對象中的代碼略有不同,因此直接加載或通過集合加載的模型之間通常會有細微的差異。例如,集合不會調用每個模型的_afterLoad方法,或者默認情況下EAV集合不會加載所有屬性數據(除非使用addAttributeToCollection('*'))。很多Magento開發正在追蹤並解決這些差異。

最後,Magento源代碼中有些地方與上述不同。例如:報表集合對象是獨立的 - 它們不與特定的模型類綁定。記住上述內容,但要準備好讓特定的Magento模塊給你帶來驚喜。

+8

您對Magento社區的貢獻是無價的。謝謝。 –

+0

@Alan Strom。許多感謝:) – ROBIN

+1

@alan如果你不介意,你可以區分B/W資源模型和資源集合。如果我們說資源模型命中或者在單個ROW上工作(如在ROW上創建,更新,刪除和選擇操作)以及資源集合在一組ROWS上工作,這是正確的嗎? 請原諒我,這可能是一個愚蠢的問題,我害怕,而這個問題:) – ROBIN