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

Magento:描述模型、资源模型和集合的基本概念,以及它们之间的关系,magento,Magento,我试图理解Magento,我想知道是否有人能给我一些关于这个话题的见解 描述模型、资源模型和集合的基本概念,以及 它们彼此之间的关系:)Alan Storm写了一篇关于资源模型的伟大文章,其中包含了从数据存储中获取数据的代码。实际上,这意味着资源模型是包含SQL构建和获取代码的对象,以及对连接到主Magento数据库的对象的引用 模型是包含用于与“类型”数据交互的数据库无关代码的对象。在传统的数据建模术语中,模型对象包含特定类型对象的业务逻辑(对象类型表示产品、客户等) 重要:除上述定义外,Ma

我试图理解Magento,我想知道是否有人能给我一些关于这个话题的见解

描述模型、资源模型和集合的基本概念,以及
它们彼此之间的关系:)Alan Storm写了一篇关于资源模型的伟大文章,其中包含了从数据存储中获取数据的代码。实际上,这意味着资源模型是包含SQL构建和获取代码的对象,以及对连接到主Magento数据库的对象的引用

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

重要:除上述定义外,Magento代码的某些部分使用“模型”作为通用对象,其中包含与数据无关的业务逻辑。这些“模型”应该被视为普通的旧对象,只是通过Magento工厂模式进行实例化。继承自
Mage\u Core\u Model\u Abstract
的模型是前者,而不是后者。这篇文章假设“模型”指的是前者。我也开始把它们称为Magento's

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

Magento模型对象包含对用于加载其数据的资源模型的引用。每个模型对象都有一个单独的资源模型对象。i、 e.产品模型具有产品资源模型

Magento模型对象也可用于实例化集合对象。集合对象的类型也会与其模型对象相匹配。产品模型可用于实例化产品集合对象

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


最后,Magento源代码中有一些地方与上述内容不同。例如:报表集合对象是独立的-它们与特定的模型类没有关联。记住以上内容,但要准备好让特定的Magento模块给您带来惊喜

你对Magento社区的贡献是无价的。“谢谢,”艾伦·斯特罗姆说。非常感谢:)@alan如果您不介意,请您区分b/w资源模型和资源集合。如果我们说资源模型在一行上运行(比如在一行上创建、更新、删除和选择操作),而资源收集在一组行上运行,这是正确的吗?请原谅,这可能是个愚蠢的问题,我问这个问题时有些害怕:)@ROBIN说得对。@AlanStorm再次感谢:)Alan写的一篇很好的文章