受到我最近在SO上看到的another question的启发,我想知道是否有人可以解释报价项(Mage_Sales_Model_Quote_Item)和报价地址项(Mage_Sales_Model_Quote_Address_Item)之间的区别?
我想我理解引用项目的概念(Mage_Sales_Model_Quote_Item - 映射到sales_flat_quote_item数据库表) - 基本上是客户购物车中的行项目,其中包括产品的名称/ sku,数量和任何特殊选项。我不明白的是引用地址项Mage_Sales_Model_Quote_Address_Item - 映射到sales_flat_quote_address_item数据库表)是用于。我看到它有一个与之相关的地址,但那到底是什么?我可以想象它可能与多地址运输(我从未使用过)有关,但这是一个疯狂的猜测。
作为第二个问题(实际上是这个问题的全部原因:/),是否存在处理引用项目的自定义模块可以安全地忽略引用地址项的情况?
答案 0 :(得分:13)
我之前已经处理过这个问题。
基本上,报价项目与您描述的一样。它代表购物车中的所有详细信息。
对于引用地址项,它只是一个对象,其中包含对引用项对象的引用,对地址对象的引用以及要发送到此特定地址的引用项之外的子集数量(但是他们无用地复制从报价项到它的所有内容。
如果是多面包结账,则是用于创建多个Magento Order对象的报价地址项(每个订单就像它与报价项的子集分开一样)。
当然,这是一个笨重的设计。如果他们只保留报价项数据并添加地址ID字段并完全取消“报价地址项”概念,那会更好。看起来像是过度正常化的情况,这种情况会对他们产生反作用。
想要弄乱购物车的代码可以安全地忽略引用地址项目,以防止只处理一个页面结帐(并且禁止多重过滤)。
如果你想在多方进行结账时也能正确显示更改,你还必须弄乱引号地址项(这些方面的代码非常难看)。
答案 1 :(得分:7)
它与“发送到多个地址”有关,因为每个项目都需要映射到单独的地址