我需要以编程方式创建报价。如果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表必须为空才能使其生效?
答案 0 :(得分:3)
听起来前端购物车代码无法将您的报价与特定客户联系起来。我将在
中开始调试app/code/core/Mage/Checkout/Model/Cart.php
文件。特别是getQuote
和saveQuote
方法。确定为什么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);