Magento:报价项目和报价地址项目在概念上有什么区别?

Magento:报价项目和报价地址项目在概念上有什么区别?,magento,Magento,受我最近在SO上看到的启发,我想看看是否有人能解释报价项目(Mage_Sales_Model_Quote_项目)和报价地址项目(Mage_Sales_Model_Quote_Address_项目)之间的区别 我想我理解报价项目的概念(Mage_Sales_Model_Quote_Item-映射到Sales_flat_Quote_Item db表)-基本上是客户购物车中的行项目,包括产品的名称/sku、数量和任何特殊选项。我不明白的是报价地址项Mage_Sales_Model_Quote_Addr

受我最近在SO上看到的启发,我想看看是否有人能解释报价项目(Mage_Sales_Model_Quote_项目)和报价地址项目(Mage_Sales_Model_Quote_Address_项目)之间的区别

我想我理解报价项目的概念(Mage_Sales_Model_Quote_Item-映射到Sales_flat_Quote_Item db表)-基本上是客户购物车中的行项目,包括产品的名称/sku、数量和任何特殊选项。我不明白的是报价地址项Mage_Sales_Model_Quote_Address_Item-映射到Sales_flat_Quote_Address_Item db表)的用途。我看到它有一个与之关联的地址,但这到底是为了什么?我可以想象,这可能与多地址传送有关(我从未使用过),但这是一个猜测


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

它与“发送到多个地址”相关,因为每个项目都需要映射到单独的地址

我以前已经处理过这个问题

基本上,报价项目与您描述的一样。它表示购物车中的行项目及其所有详细信息

至于quote address项,它只是一个对象,包含对quote项对象的引用、对address对象的引用以及要发送到该特定地址的quote项的子集数量(但是它们将从quote项复制到该地址的所有内容都是无用的)

在多片式签出的情况下,用于创建多个Magento Order对象的是quote address项(每个订单好像与quote项的子集分离)

当然,这是一个笨重的设计。如果他们只保留报价项数据并添加一个地址id字段,并完全取消“报价地址项”的概念,那就更好了。看起来像是过度正常化的例子,结果适得其反

如果代码只处理单页签出(并且禁用了多页签出),那么想要弄乱购物车的代码可以安全地忽略报价地址项


如果您还想在多片式签出中正确显示更改,您还必须处理报价地址项(这些区域中的代码非常难看)。

如果是这样,您知道为什么报价项中的大部分数据都被克隆到此表中吗?似乎quote\u address上的可选地址\u id字段可以解决相同的问题。@Joseph。我完全同意你的看法。有点烦人所有的数据都是重复的。。。甚至对于只使用一页结账的商店也是如此。很高兴知道这背后的原因,但是哦,好吧,回答得很好。我正在试图理解Magento背后的一些概念,这本书非常有用。@Raif atef nice explain