是magento销售eav

时间:2013-01-31 09:52:51

标签: magento entity-attribute-value

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

<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”有很多与“order”相关的记录。

但是,我仔细阅读了代码,遗憾的是,EAV在当前代码库中至少没有(至少v1.7)。 任何人都可以帮忙澄清一下吗?销售/订单的EAV是否已取消评估?

2 个答案:

答案 0 :(得分:8)

在最新版本的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/

答案 1 :(得分:2)

我比较了旧的Magento版本,发现两个版本1.4.0.1和1.4.1.0之间的销售订单模型有很大差异

添加此文件以创建sales_flat_order并删除Order EAV表 Mage / Sales / sql / mysql4-upgrade-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)
    );
}

资源类文件Mage_Sales_Model_Mysql4_Order已更改为从Mage_Sales_Model_Mysql4_Order_Abstract扩展而不是Mage_Eav_Model_Entity_Abstract

Magento还指出,从这个版本的EAV到平板销售的变化可能是一个非常繁重的操作。

我相信我们不能再将EAV用于与产品或客户相同的订单。