2011-04-21 149 views
2

我发送订单后,Magento如何保存订单产品(在sales_flat_order_item表中)。我需要这些文件,因为我想将正常价格保存在数据库中;如果您有特殊价格,Magento只有在有人下订单时才会在数据库中保存特价。 或者没有人有任何想法如何将每个订购产品的正常价格保存在数据库中?Magento如何将订购的产品保存在数据库中?

回答

4

慢慢地?小心?用SQL?我小子,我小子。

诚实的说,是的,你是正确的,存储在订单商品表中的唯一数据是顾客实际支付的价格(而不是正常价格)。如果你想保存在该表的额外的数据,请执行以下操作:

  1. 使用安装程序SQL脚本
  2. 让你的模块的安装程序添加一个新的列到订单项目表
  3. 创建一个新模块
  4. 添加的观察员预存事件上的订单项目
  5. 作出这样的观测记录中的正常价格为您的新列现在

,你应该在数据库的数据,并能够检索它正常像任何其他专栏一样。希望有所帮助!

谢谢, 乔

+0

谢谢。经过很多努力,我找到了另一个解决方案。我添加到'sales_flat_order_item'我的新字段'regular_price',然后添加到'itemToOrderItem'函数中的'APP/CODE/CORE/MAGE/SALES/MODEL/CONVERT/Quote.php'$ product = Mage :: getModel('catalog /产品'); \t \t $ product-> load($ item-> getProductId()); \t \t \t \t $ price = 0; \t \t如果($产品 - >的getData( 'special_price')!= NULL && $产品 - >的getData( 'special_price')> 0){ \t \t \t $价格= $产品 - >的getData( '价格') ; \t \t}'和一个额外的字段为'$ orderItem = Mage :: getModel('sales/order_item') - > setRegularPrice($ price)'。 – 2011-04-22 06:01:29

+5

这不是一个好的解决方案。下次您升级Magento时,您的代码将被覆盖并中断。使用模块和观察者的原因是它不会中断系统的其余部分,并且它将与未来兼容,而这种解决方案会导致您的问题不断出现。 – 2011-04-22 12:33:04

0

我很好奇,为什么你甚至需要有存储在表原价......你总是可以看看它在飞行时,您是通过订单项循环:

$origPrice = Mage::getModel('catalog/product')->load($item->getProductId())->getData('price'); 

或者你也可以写自己的模块,在“sales_flat_order_item”无论是创建新列,或者创建自己的表引用特定的ID在该表中。您可以让您的模块观察订单成功事件,并循环查看订单中的所有产品并设置数据库中的值。

像约瑟夫在上面的评论中说的,你应该永远不要修改核心代码。如果您需要进行更改,请编写适当的模块。如果你正在修改核心代码(或者,在我看来,如果你正在创建这个目录:app/code/local/Mage /),那么你做错了什么。

+0

在飞行中查找并不总是一个解决方案,因为我想知道订购时的原始价格,而不是当前时间。 – KoviNET 2012-12-21 13:24:33

相关问题