欢迎来到天天文库
浏览记录
ID:47031925
大小:89.96 KB
页数:17页
时间:2019-07-01
《magento开发文档(七):magento eav模型》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、Magento开发文档(七):MagentoEAV模型+6Magento中文手册(七):MagentoEAV模型在第一篇介绍MagentoORM的文章中,我们提到过Magento拥有两类模型。普通的模型及EntityAttributeValue(EAV)模型。这里首先搞清楚它们之前的一些关系。所有的Magento模型都继承自Mage_Core_Model_Abstract/Varien_Object类链。真正区别普通模型和EAV模型的关键是该模型使用的模型资源(ModelResource)。尽管所有的资源类都继承自Mage_Core_Model_Resource_Ab
2、stract类,普通模型拥有继承自该类的子类Mage_Core_Model_Mysql4_Abstract,同时EAV模型拥有继承自该类的另外一个子类Mage_Eav_Model_Entity_Abstract。为什么要这样设计呢?仔细想想,不难得出结论。作为终端程序员,你需要的只是如何与数据库交互的方法,而不用在意底层是如何实现的。EAV模型这里我们引用维基百科的定义,这段暂时就不翻译了,太多术语。Entity-Attribute-Valuemodel(EAV),alsoknownasobject-attribute-valuemodelandopenschemai
3、sadatamodelthatisusedincircumstanceswherethenumberofattributes(properties,parameters)thatcanbeusedtodescribeathing(an“entity”or“object”)ispotentiallyveryvast,butthenumberthatwillactuallyapplytoagivenentityisrelativelymodest.Inmathematics,thismodelisknownasasparsematrix.在一个普通的数据库中,表中一般包含
4、多列,像下表所示,+——————+
5、products
6、+——————+
7、product_id
8、
9、name
10、
11、price
12、
13、etc..
14、+——————++————+—————-+——————+———+
15、product_id
16、name
17、price
18、etc…
19、+————+—————-+——————+———+
20、1
21、WidgetA
22、
23、11.34
24、etc…
25、+————+—————-+——————+———+
26、2
27、DongleB
28、6.34
29、etc…
30、+————+—————-+——————+———+每个产品都有,name,price等等字段。在EAV模型中,每个模型化的实体/entity(比如说产品)拥有一系列不同的属性。EAV模型几乎可以提供给电子商务一个通用的数据库解决方案。一个出售电脑(属性:CPU速度,颜色,内存)的网店与一个出售衣服(颜色,尺码,性别)的网店对于商品属性的需要肯定大不相同。即
31、使是在电脑网店中,不同的产品对于属性的要求也有差别,如笔记本电脑(电池),台式电脑(机箱)。使用EAV模型的数据库程序,在开源及商业软件里都不多。并且多数IDC主机提供商都没有大规模采用这种数据库解决方案。因此,Magento工程师通过MySQL作为底层数据存储,用PHP实现了EAV系统。换句话说,Magento在传统关系数据库上构建了EAV数据库系统。不得不说,这是Magento对于电子商务解决方案领袖地位的体现。在实际应用中,这意味着任何使用EAV模型资源的模型,其属性都是分布在MySQL的多个表里(而非像上图中演示的普通数据库那样)。MagentoEav上图演示
32、了查询一条catalog_product(产品信息)EAV记录时,Magento所需要与数据库表进行交互的一个大概轮廓。每个产品在catalog_product_entity中有一条对应的记录。而整个系统中所有能够使用的属性(颜色,大小,等等,且不限于产品本身)都保存在eav_attribute表中,注意,该表中只是记录全局使用的属性,并不会记录任何属性值。之际的属性值分散在很多表中,例如catalog_product_entity_attribute_varchar,catalog_product_entity_attribute_decimal,
此文档下载收益归作者所有