2011-02-09 74 views
10

another question的启发我最近看到了SO,我想看看是否有人可以解释报价项目(Mage_Sales_Model_Quote_Item)和报价地址项目(Mage_Sales_Model_Quote_Address_Item)之间的区别?Magento:报价项目和报价地址项目之间的概念区别是什么?

我想我明白报价单的概念(Mage_Sales_Model_Quote_Item - 映射到sales_flat_quote_item数据库表) - 基本上是客户购物车中的一个订单项,其中包含产品的名称/数量,以及任何特殊选项。我不明白的是引用地址项目Mage_Sales_Model_Quote_Address_Item - 映射到sales_flat_quote_address_item数据库表格)。我看到它有一个与之相关的地址,但是它的目的是什么?我可以想象它可能与多地址发送有关(我从未使用过),但这是一个疯狂的猜测。

作为第二个问题(实际上是这个问题的全部原因:/),是否有任何处理报价项目的自定义模块可以安全地忽略报价地址项目的情况?

回答

7

为每个项目需要与“船到多个地址”它被映射到不同的地址

+1

如果是这种情况,您是否清楚为什么大部分来自quote_item的数据被克隆到此表中?看起来像quote_address上的可选address_id字段将解决同样的问题。 – 2011-02-09 21:55:10

+1

@约瑟夫。我完全同意你的看法。令人讨厌的是,所有这些数据都是重复的......甚至对只使用onepage结账的商店也是如此。很高兴知道这背后的原因,但是哦。 – shaune 2011-02-11 18:27:57

11

我以前处理了这一点。

基本上,报价项目就像你描述的那样。它代表购物车中的所有细节的订单项。

至于报价地址项目,它只是一个对象,它包含对报价项目对象的引用,对地址对象的引用以及将要发送到此特定地址的报价项目中的子集数量(但是他们从报价项目到无用地复制了所有内容)。

如果使用multishipping结帐,它是用于创建几个Magento订单对象(每个订单,就好像它与报价项目的子集分开)的报价地址项目。

当然,这是一个笨重的设计。如果他们只保留报价项目数据并添加地址标识字段并完全消除“报价地址项目”概念,那将会更好。看起来像是一个过度规范化的案例,导致他们反感。

想要与购物车混淆的代码可以安全地忽略报价地址项目,以便仅处理onepage结帐(并且multishipping已禁用)。

如果你想也有变化multishipping结账正确显示,你也必须惹帖地址项目(并在这些地区的代码是相当难看)。

相关问题