13

我正在尝试了解 Magento,我想知道是否有人可以给我关于这个主题的任何见解

描述模型、资源模型和集合的基本概念,以及它们之间的关系

4

2 回答 2

39

资源模型是包含从数据存储中获取数据的代码的对象。实际上,这意味着资源模型是包含 SQL 构建和获取代码的对象,以及对连接到主 Magento 数据库的对象的引用。

模型是包含数据库无关代码的对象,用于与“类型”数据进行交互。在传统的数据建模术语中,您的模型对象包含特定类型对象的业务逻辑(对象类型意味着产品、客户等)。

重要提示:除上述定义外,部分 Magento 代码使用“模型”作为包含与数据无关的业务逻辑的通用对象。这些“模型”应该被认为是普通的旧对象,只是通过 Magento 工厂模式实例化。继承自的模型Mage_Core_Model_Abstract是前者——不继承的模型是后者。这篇文章假设“模型”是指前者。我也开始将这些称为 Magento 的CRUD 模型

集合是一个对象,其中包含获取模型对象组(集合、数组、列表等)的代码。由于它生成 SQL 来执行此操作,因此它也被视为资源模型并使用该Mage::getResourceModel方法进行实例化(尽管集合对象继承自与普通资源模型不同的类链。这些不是您正在寻找的设计模式)。集合对象也实现了某些标准的 PHP 接口,并且可以在foreach循环中使用以迭代它们的结果。

Magento 模型对象包含对资源模型的引用,该模型用于加载其数据。每个模型对象都有一个单独的资源模型对象。即一个产品模型有一个产品资源模型。

Magento 模型对象也可用于实例化集合对象。集合对象也被键入以匹配它们的模型对象。Product 模型可用于实例化 Product 集合对象。

集合对象创建 SQL 以获取对象组(集合、数组、列表等),它还包含将数据分配给主模型对象的代码。由于此代码与模型的资源模型对象中的代码略有不同,因此直接加载或通过集合加载的模型之间通常存在细微差异。例如,集合不调用每个模型的_afterLoad方法,或者 EAV 集合默认不会加载所有属性数据(除非addAttributeToCollection('*')使用)。许多 Magento 开发人员正在追踪并解决这些差异。

最后,Magento 源代码中有些地方与上述不同。例如:报告集合对象是独立的——它们与特定的模型类无关。记住以上几点,但要准备好让特定的 Magento 模块让你大吃一惊。

于 2012-10-25T20:36:27.863 回答
3

打字太多了 :) Alan Storm 写了一篇关于magento 模型基础的精彩文章

于 2012-10-25T18:48:00.503 回答