以编程方式创建报价不起作用

时间:2013-11-17 18:33:49

标签: magento

我需要以编程方式创建报价。如果sales_flat_quote表为空,则它有效。如果它不是空的那么它就不起作用。到目前为止,这是我在indexAction()中的代码。

$customer_id = Mage::getSingleton('customer/session')->getId();
$product_id = $this->getRequest()->getParam('product_id');
$store_id = Mage:app()->getStore()->getId();
$customerObj = Mage::getModel('customer/customer')->load($customer_id);
$quoteObj = Mage::getModel('sales/quote')->assignCustomer($customerObj);
$storeObj = $quoteObj->getStore()->load($store_id);
$quoteObj->setStore($storeObj);
$productModel = Mage::getModel('catalog/product');
$productObj = $productModel->load($product_id);
$quoteItem = Mage::getModel('sales/quote_item')->setProduct($productObj);
$quoteItem->setQuote($quoteObj);
$quoteItem->setQty('1');
$quoteItem->setStoreId($store_id);
$quoteObj->addItem($quoteItem);
$quoteObj->setStoreId($store_id);
$quoteObj->collectTotals();
$quoteObj->save();
$this->_redirect('checkout/cart/');

知道为什么sales_flat_quote表必须为空才能使其生效?

1 个答案:

答案 0 :(得分:3)

听起来前端购物车代码无法将您的报价与特定客户联系起来。我将在

中开始调试
app/code/core/Mage/Checkout/Model/Cart.php

文件。特别是getQuotesaveQuote方法。确定为什么Magento在前端加载空引号,问题应该被阐明。

根据以下评论,您似乎在这里实例化您的代码对象

$quoteObj = Mage::getModel('sales/quote')->assignCustomer($customerObj);

每次都会创建一个新的引用模型对象。如果要保存现有报价,则需要加载它而不是每次都创建新的报价模型对象。您可以使用以下

按ID加载现有报价
Mage::getModel('sales/quote')->load($quote_id);

引用对象看起来也有一个loadByCustomerId方法,所以你可能会有这样的运气

$quoteObj = Mage::getModel('sales/quote');
$quoteObj = $quoteObj->loadByCustomerId($quoteObj, $customer_id);