Magento - 实体中的EAV属性与其表类型中的属性之间有何区别

时间:2014-01-23 09:33:28

标签: database magento optimization entity-attribute-value

我有下一个疑问:

在EAV数据结构中,您可以在实体或相关类型的表中找到属性。

例如:

catalog_product_entity

| entity_id | entity_type_id | attribute_set_id | type_id |   sku   | has_option | ....
|     1     |        4       |       34         |  simple | 0912132 |    0       |

catalog_product_entity_datetatime

| value_id  |  entity_type_id | attribute_id  | store_id | entity_id | value
|    1      |       4         |      71       |    0     |     1     |  NULL

catalog_product_entity_decimal

 | value_id  |  entity_type_id | attribute_id  | store_id | entity_id |value 
 |    1      |       4         |     69        |   1      |    1      | 29.009

您可以在平面表catalog_product_entity中找到属性sku,并在表 catalog_product_entity_datatime 中找到attribute_id 71 69 catalog_product_entity_decimal

为什么实体表中的属性为sku?是因为优化原因吗?

如果我想改善属性的负载,我可以将它插入实体表中吗?实体表中的合理数量的属性是什么?

1 个答案:

答案 0 :(得分:1)

为了正确保存任何EAV对象,这些属性(类型为static)是必需的,而不会覆盖save()方法或每种实体类型的保存中涉及的其他方法。
您可以查看此方法Mage_Eav_Model_Entity_Abstract::_collectSaveData()。所有EAV实体模型都扩展Mage_Eav_Model_Entity_Abstract,并在保存实例时调用该方法 所有静态属性都将添加到数组$entityRow中。这意味着它们将保存在主表中,但您仍然可以选择将backend_model附加到静态属性,该属性将在实际保存完成之前处理要保存的值。