石家庄网站建设云图,wordpress主题编辑,网易企业邮箱手机版,wordpress 菜单 无效EAV #xff1a; Entity - Attribute - Value 的缩写#xff0c;是数据库模型的一种#xff0c;使用eav建模的好处是可以动态为数据模型增加或移除属性。1. 问题提出:假设需要定义一个实体Customer的信息#xff0c;通常我们只要定义一个表为customer#xff0c;并定义相应…EAV Entity - Attribute - Value 的缩写是数据库模型的一种使用eav建模的好处是可以动态为数据模型增加或移除属性。1. 问题提出:假设需要定义一个实体Customer的信息通常我们只要定义一个表为customer并定义相应的属性即可。倘若某天需要为customer增加一个新的属性如“毕业学校”那么就需要更改表的结构。如果使用EAV模型则不必改变表结构。2. Magento的EAV模型定义:在Magento中EAV模型相关的表定义有Java代码eav_attributeeav_attribute_groupeav_attribute_optioneav_attribute_option_valueeav_attribute_seteav_entityeav_entity_attributeeav_entity_datetimeeav_entity_decimaleav_entity_inteav_entity_storeeav_entity_texteav_entity_typeeav_entity_varchareav_attributeeav_attribute_groupeav_attribute_optioneav_attribute_option_valueeav_attribute_seteav_entityeav_entity_attributeeav_entity_datetimeeav_entity_decimaleav_entity_inteav_entity_storeeav_entity_texteav_entity_typeeav_entity_varchar现在让我来观察最重要的三张表eav_entity_typeeav_entity_attributeeav_attribute1) eav_entity_type表用来定义实体的基本信息。Sql代码mysqlselect*fromeav_entity_typewhereentity_type_id1;---------------------------------------------------------------------------------------| entity_type_id | entity_type_code | entity_model | attribute_model | entity_table | ---------------------------------------------------------------------------------------| 1 | customer | customer/customer | | customer/entity |---------------------------------------------------------------------------------------mysql select * from eav_entity_type where entity_type_id1;---------------------------------------------------------------------------------------| entity_type_id | entity_type_code | entity_model | attribute_model | entity_table | ---------------------------------------------------------------------------------------| 1 | customer | customer/customer | | customer/entity |---------------------------------------------------------------------------------------2). eav_entity_attribute表用来定义实体customer模型包含哪些属性Sql代码mysqlselect*fromeav_entity_attributewhereentity_type_id1;-----------------------------------------------------------------------------------------| entity_attribute_id | entity_type_id | attribute_set_id | attribute_group_id | attribute_id |-----------------------------------------------------------------------------------------| 1 | 1 | 1 | 1 | 1 || 2 | 1 | 1 | 1 | 2 || 3 | 1 | 1 | 1 | 3 || 4 | 1 | 1 | 1 | 4 || 5 | 1 | 1 | 1 | 5 || 6 | 1 | 1 | 1 | 6 || 7 | 1 | 1 | 1 | 7 || 8 | 1 | 1 | 1 | 8 || 9 | 1 | 1 | 1 | 9 || 10 | 1 | 1 | 1 | 10 || 11 | 1 | 1 | 1 | 11 || 12 | 1 | 1 | 1 | 12 || 13 | 1 | 1 | 1 | 13 || 14 | 1 | 1 | 1 | 14 || 15 | 1 | 1 | 1 | 15 || 16 | 1 | 1 | 1 | 16 |-----------------------------------------------------------------------------------------mysql select * from eav_entity_attribute where entity_type_id1;-----------------------------------------------------------------------------------------| entity_attribute_id | entity_type_id | attribute_set_id | attribute_group_id | attribute_id |-----------------------------------------------------------------------------------------| 1 | 1 | 1 | 1 | 1 || 2 | 1 | 1 | 1 | 2 || 3 | 1 | 1 | 1 | 3 || 4 | 1 | 1 | 1 | 4 || 5 | 1 | 1 | 1 | 5 || 6 | 1 | 1 | 1 | 6 || 7 | 1 | 1 | 1 | 7 || 8 | 1 | 1 | 1 | 8 || 9 | 1 | 1 | 1 | 9 || 10 | 1 | 1 | 1 | 10 || 11 | 1 | 1 | 1 | 11 || 12 | 1 | 1 | 1 | 12 || 13 | 1 | 1 | 1 | 13 || 14 | 1 | 1 | 1 | 14 || 15 | 1 | 1 | 1 | 15 || 16 | 1 | 1 | 1 | 16 |-----------------------------------------------------------------------------------------3), 由上表推出customer实体包含16个属性下面的语句查看每个属性的具体定义Sql代码mysqlselect*fromeav_attributewhereattribute_id16andattribute_id1 ;--------------------------------------------------------------| attribute_id | entity_type_id | attribute_code | backend_type |--------------------------------------------------------------| 1 | 1 | website_id | static|| 2 | 1 | store_id | static|| 3 | 1 | created_in | varchar|| 4 | 1 | prefix | varchar|| 5 | 1 | firstname | varchar|| 6 | 1 | middlename | varchar|| 7 | 1 | lastname | varchar|| 8 | 1 | suffix | varchar|| 9 | 1 | email | static|| 10 | 1 | group_id | static|| 11 | 1 | dob | datetime || 12 | 1 | password_hash | varchar|| 13 | 1 | default_billing | int|| 14 | 1 | default_shipping | int|| 15 | 1 | taxvat | varchar|| 16 | 1 | confirmation | varchar|--------------------------------------------------------------mysql select * from eav_attribute where attribute_id16 and attribute_id1 ;--------------------------------------------------------------| attribute_id | entity_type_id | attribute_code | backend_type |--------------------------------------------------------------| 1 | 1 | website_id | static || 2 | 1 | store_id | static || 3 | 1 | created_in | varchar || 4 | 1 | prefix | varchar || 5 | 1 | firstname | varchar || 6 | 1 | middlename | varchar || 7 | 1 | lastname | varchar || 8 | 1 | suffix | varchar || 9 | 1 | email | static || 10 | 1 | group_id | static || 11 | 1 | dob | datetime || 12 | 1 | password_hash | varchar || 13 | 1 | default_billing | int || 14 | 1 | default_shipping | int || 15 | 1 | taxvat | varchar || 16 | 1 | confirmation | varchar |--------------------------------------------------------------所以使用上述的模型一旦有CUSTOMER属性定义的添加和删除只需要增加或删除 eav_entity_attribute的记录即可3. 使用EAV模型现在在Magento系统注册一个新的用户看看实例数据如何存放在数据库Sql代码mysqlselect*fromcustomer_entity ;-----------------------------------------------------------------------------| entity_id | entity_type_id | attribute_set_id | website_id | email |-----------------------------------------------------------------------------| 1 | 1 | 0 | 1 | koda.guogmail.com |-----------------------------------------------------------------------------mysql select*fromcustomer_entity_varchar ;----------------------------------------------------------------------------------------| value_id | entity_type_id | attribute_id | entity_id | value |----------------------------------------------------------------------------------------| 1 | 1 | 5 | 1 | Koda || 2 | 1 | 7 | 1 | Guo || 4 | 1 | 3 | 1 | DefaultStoreView|| 5 | 1 | 12 | 1 | 2256e441b74ab3454a41c821f5de1e9d:9s |----------------------------------------------------------------------------------------mysql select * from customer_entity ;-----------------------------------------------------------------------------| entity_id | entity_type_id | attribute_set_id | website_id | email |-----------------------------------------------------------------------------| 1 | 1 | 0 | 1 | koda.guogmail.com |-----------------------------------------------------------------------------mysql select * from customer_entity_varchar ;----------------------------------------------------------------------------------------| value_id | entity_type_id | attribute_id | entity_id | value |----------------------------------------------------------------------------------------| 1 | 1 | 5 | 1 | Koda || 2 | 1 | 7 | 1 | Guo || 4 | 1 | 3 | 1 | Default Store View || 5 | 1 | 12 | 1 | 2256e441b74ab3454a41c821f5de1e9d:9s |----------------------------------------------------------------------------------------从上表看到customer_entity 和customer_entity_varchar用来存放相应属性的实际输入值。如Koda, Guo分别属性编号5,7即firstname和lastname实际值和customer实体定义相对应的实例存放的相关表包括Java代码customer_entitycustomer_entity_datetimecustomer_entity_decimalcustomer_entity_intcustomer_entity_textcustomer_entity_varcharcustomer_entitycustomer_entity_datetimecustomer_entity_decimalcustomer_entity_intcustomer_entity_textcustomer_entity_varchar总结了解Magento的EAV模型结构是扩展Magento必须的知识。 其意义在于我们常常需要扩展Magento某些实体的属性或者创建自定义的eav模型实例。希望本文对你有所启示。