2013-01-31 69 views
4

通过检查销售模块的配置,有sales_entity部分如下是Magento的销售EAV

<models> 
<sales> 
    <class>Mage_Sales_Model</class> 
    <resourceModel>sales_resource</resourceModel> 
</sales> 
<sales_entity> 
    <class>Mage_Sales_Model_Entity</class> 
    <entities> 
     <quote> 

和那些类Mage_Sales_Model_Entity_xxx扩展Mage_Eav_Model_Entity_Abstract,显示出销售/订单EAV风格,但不是平的。 我也可以找到表“eav_entity_type”有很多与“订单”相关的记录。

但是,我经历了代码,不幸的是,EAV在当前的代码库(至少v1.7)中并没有终于到位。 任何人都可以帮助澄清?销售/订单的EAV是否已过时?

回答

7

在最新版本的Magento中(即1.6和1.7,以前不能说),销售实体属性不再存储在EAV属性值表中。 Mage_Sales模块的资源模型将销售实体连接到平面表。

你也可以看到,基本销售模式类Mage_Sales_Model_Abstract扩展Mage_Core_Model_Abstract和基本销售资源模型Mage_Sales_Model_Resource_Abstract扩展Mage_Core_Model_Resource_Db_Abstract - 这些都不是一个EAV模型或EAV资源模型。

您在表eav_entity_type中找到的属性实体元数据与Catalog和Customer模块的EAV实体类似,但属性值存储系统不是EAV。

我想,你遇到的配置留给后向兼容。

我放在一起Magento的EAV系统的描述,你会发现很有趣:http://www.divisionlab.com/solvingmagento/magento-eav-system/

+0

文章很好,谢谢! –

+0

那么,订单,发票,贷记凭证,发货都不是EAV结构? –

2

我比较老的Magento版本,发现1.4.0.1两个版本之间的销售订单模式有很大的不同和1.4.1.0

加入此文件来创建sales_flat_order和删除订单EAV表 法师/销售/ SQL/mysql4升级-1.3.99-1.4.0.0.php - 线路1144

// Remove previous tables 
$tablesToDrop = array(
    'sales_order_entity_decimal', 
    'sales_order_entity_datetime', 
    'sales_order_entity_int', 
    'sales_order_entity_text', 
    'sales_order_entity_varchar', 
    'sales_order_entity', 
    'sales_order_decimal', 
    'sales_order_datetime', 
    'sales_order_int', 
    'sales_order_text', 
    'sales_order_varchar', 
    'sales_order' 
); 

foreach ($tablesToDrop as $table) { 
    $table = $installer->getTable($table); 
    if (!$installer->tableExists($table)) { 
     continue; 
    } 
    $installer->getConnection()->query(
     'DROP TABLE ' . $installer->getConnection()->quoteIdentifier($table) 
    ); 
} 

资源c姑娘文件Mage_Sales_Model_Mysql4_Order改为从Mage_Sales_Model_Mysql4_Order_Abstract而不是Mage_Eav_Model_Entity_Abstract

扩展的Magento还注意到,对从EAV到平板销量变化对这个版本可能是一个非常沉重的操作。

我相信我们不能使用EAV作为与产品或客户相同的订单。

+0

所以我们知道我们从eav切换到flat的确切点,这对那些想要获得eav的人可能会有所帮助。另一方面,即使对于产品表,除了通过reindex过程的eav之外,我们还有平面表。希望magento社区可以为这些版本提供更多的性能统计信息。 –