4

通过检查销售模块的配置,有如下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_xxxextends Mage_Eav_Model_Entity_Abstract,表明销售/订单是EAV风格而不是扁平的。我还可以找到表“eav_entity_type”有很多与“订单”相关的记录。

但是,遗憾的是,我浏览了代码,EAV最终在当前的代码库中没有到位(至少 v1.7)。谁能帮忙澄清一下?是否EAV已弃用销售/订单?

4

2 回答 2

8

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

您还可以看到基本 Sales 模型类Mage_Sales_Model_Abstractextends Mage_Core_Model_Abstract,并且基本 Sales 资源模型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/

于 2013-01-31T10:50:40.193 回答
2

我比较了旧的 Magento 版本,发现 2 个版本 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 用于与产品或客户相同的订单。

于 2014-02-19T06:52:29.330 回答