Magento 2:更新报价项目


10

我正在尝试更新magento2中的报价项目。但是每次我保存项目时,都会使用相同的引用ID而不是更新它来创建一个新项目。这是我的代码

    public function __construct(
            \Magento\Quote\Model\QuoteRepository $quoteRepo
        ){
            $this->_quoteRepo = $quoteRepo;
        }

public function updateItem(){
    $quote = $this->_quoteRepo->get('id here');
    foreach($quote->getAllVisibleItems() as $itemq){
    $itemq->setQty(5);
    $itemq->setPrice(20);
    $itemq->save();
    }
 }

但是,每次它保存一个项目时,都会生成一个新项目。不知道为什么。也I couldn't find any class which explicitly load qoute item in magento2。帮助将不胜感激。

在这个问题上,/magento/139298/how-to-save-quote-items-in-magento-2他们正在设置整个产品...而不是尝试对其进行更新。设置产品时,肯定会生成新的报价项目。但是为什么在更新的情况下也这样做。



1
不一样。我已经编辑了我的问题。@AnkitShah,请检查。
金舒克Deb

对于Magento 2.2+,请参阅此-magento.stackexchange.com/a/182152/4492
Rohan Patil,

Answers:


16

我不确定以下解决方案:

  • 可能是您需要 按物料ID 加载Quote物料对象
  • 当你想要一套的价格,然后使用setPrice()不能设置你的欲望的价格为车项目
$item = $quote->getItemById($item->getId());
if (!$item) {
  continue;
}
$item->setQty((double) $qty);
$item->setCustomPrice($price);
$item->setOriginalCustomPrice($price);
$item->getProduct()->setIsSuperMode(true);
$item->save(); 

1
如何更新其他选项
sivakumar

嗨@Amit,如何更新商品的taxAmount ?,我们可以为单个报价商品设置自定义税额吗?
贾法尔·品哈尔(Jafar Pinjar),

2

您要的功能已经完成,Magento\Checkout\Controller\Cart\UpdatePost 当我们更新magento的购物车页面上的购物车时,将执行该功能。它updateItems()具有Magento\Checkout\Model\Cart更新quote_item表中项目的功能。它采用array形式的参数$data ['item id of product']['attribute you want to update']

因此,您可以调用 updateItems()购物车模型对象并相应地传递数据以更新商品。此外,如果您没有获取商品ID,则可以像获取商品ID一样$this->cart->getQuote()->getAllItems(),然后调用getItemId()每个商品。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.