Magento 2: Memperbarui item kutipan

10

Saya mencoba memperbarui item kutipan di magento2. Tetapi setiap kali saya menyimpan item itu membuat item baru dengan id kutipan yang sama daripada memperbaruinya. Ini kode saya

    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();
    }
 }

Tapi setiap kali menyimpan item .. item baru dihasilkan. Tidak tahu kenapa. Juga I couldn't find any class which explicitly load qoute item in magento2. Bantuan akan dihargai.

Dalam pertanyaan ini /magento/139298/how-to-save-quote-items-in-magento-2mereka mengatur seluruh produk ... tidak mencoba memperbaruinya. Ketika Anda menetapkan suatu produk, item penawaran baru pasti akan menghasilkan. Tetapi mengapa melakukan hal yang sama dalam hal pembaruan.

Kingshuk Deb
sumber
2
Kemungkinan rangkap dari Bagaimana cara menyimpan item kutipan di magento 2
Ankit Shah
1
Tidak sama. Saya telah mengedit pertanyaan saya. @AnkitShah silakan periksa.
Kingshuk Deb
Untuk Magento 2.2+ lihat ini - magento.stackexchange.com/a/182152/4492
Rohan Patil

Jawaban:

16

Saya tidak yakin tentang solusi saya di bawah ini:

  • Mungkin Anda perlu memuat objek Item kutipan dengan id item
  • Karena Anda ingin menetapkan harga kemudian menggunakan setPrice (), Anda tidak dapat menetapkan harga keinginan Anda untuk item keranjang itu
$item = $quote->getItemById($item->getId());
if (!$item) {
  continue;
}
$item->setQty((double) $qty);
$item->setCustomPrice($price);
$item->setOriginalCustomPrice($price);
$item->getProduct()->setIsSuperMode(true);
$item->save(); 
Amit Bera
sumber
1
cara memperbarui opsi tambahan
sivakumar
hi @Amit, Bagaimana cara memperbarui taxAmount untuk item ?, bisakah kita menetapkan jumlah pajak khusus untuk item penawaran individual?
jafar pinjar
2

Fungsionalitas yang Anda tanyakan sudah dilakukan Magento\Checkout\Controller\Cart\UpdatePost yang dijalankan ketika kami memperbarui keranjang di halaman keranjang magento. Ini menjalankan updateItems()fungsi Magento\Checkout\Model\Cartuntuk memperbarui item dalam quote_itemtabel. Dibutuhkan parameter dalam bentuk array $data ['item id of product']['attribute you want to update'].

Jadi, Anda dapat memanggil updateItems()objek model keranjang dan meneruskan data sesuai untuk memperbarui item. Juga jika Anda tidak mendapatkan id item, Anda bisa mendapatkannya seperti $this->cart->getQuote()->getAllItems()dan kemudian memanggil getItemId()setiap item.

Vivek Kumar
sumber