通过检查销售模块的配置,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
是否已取消评估?
答案 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用于与产品或客户相同的订单。