回答
資源模型都包含對象從數據存儲中獲取數據的代碼。實際上,這意味着資源模型是包含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模塊給你帶來驚喜。
- 1. 一組關係的概念模型
- 2. 數據模型概念之間的關係
- 3. 領域模型和概念模型之間有什麼區別
- 4. 領域模型,概念模型和商業模型等之間的區別
- 5. DDD概念模型到集合根域模型
- 6. 參數集上下文和模型模式之間的關係?
- 7. 視圖模型和模型和視圖之間的關係
- 8. 視圖和模型之間的關係
- 9. Rails - 單表繼承 - 關於模型關係的概念問題
- 10. WCF安全模型的概念性概述?
- 11. 寧靜的JSON資源關係模型
- 12. WPF中模型視圖和視圖模型之間的關係
- 13. magento中資源模型和模型的區別
- 14. 基本ember.js模板概念
- 15. 與約束概念模型
- 16. 模型描述中「enum」和「in」之間的區別
- 17. EcomDev_PHPUnit模擬Magento的模型集合
- 18. Authlogic,多個用戶類型以及同一模型之間的多個關係
- 19. 鋰的mongodb模型之間的關係
- 20. 概念模型vs邏輯模型vs規範模型
- 21. Magento重寫核心模型資源集合
- 22. Backbone.js - 集合之間的「同步」模型
- 23. 找不到概念模型類型
- 24. CakePHP 3 - 模型之間的關係
- 25. Rails兩種模型之間的關係
- 26. 關係在模型之間的Yii
- 27. 多個模型之間的ManyToManyField關係
- 28. Laravel 3個模型之間的關係
- 29. 「雙」ManyToMany模型之間的關係PlayFramework
- 30. Laravel 5 - 模型之間的關係
您對Magento社區的貢獻是無價的。謝謝。 –
@Alan Strom。許多感謝:) – ROBIN
@alan如果你不介意,你可以區分B/W資源模型和資源集合。如果我們說資源模型命中或者在單個ROW上工作(如在ROW上創建,更新,刪除和選擇操作)以及資源集合在一組ROWS上工作,這是正確的嗎? 請原諒我,這可能是一個愚蠢的問題,我害怕,而這個問題:) – ROBIN