Magento 2: Cập nhật mục báo giá


10

Tôi đang cố gắng cập nhật mục trích dẫn trong magento2. Nhưng mỗi khi tôi lưu mục này, nó tạo ra một mục mới với cùng một id trích dẫn thay vì cập nhật nó. Đây là mã của tôi

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

Nhưng mỗi khi nó tiết kiệm một vật phẩm .. một vật phẩm mới sẽ được tạo ra. Không biết tại sao. Ngoài ra I couldn't find any class which explicitly load qoute item in magento2. Trợ giúp sẽ được đánh giá cao.

Trong câu hỏi này, /magento/139298/how-to-save-quote-items-in-magento-2họ đang thiết lập toàn bộ sản phẩm ... không cố gắng cập nhật nó. Khi bạn đặt một sản phẩm, một mục báo giá mới chắc chắn sẽ tạo ra. Nhưng tại sao nó làm tương tự trong trường hợp cập nhật.



1
Không giống. Tôi đã chỉnh sửa câu hỏi của tôi. @AnkitShah vui lòng kiểm tra.
Kingshuk Deb

Đối với Magento 2.2+, hãy tham khảo điều này - magento.stackexchange.com/a/182152/4492
Rohan Patil

Câu trả lời:


16

Tôi không chắc chắn về giải pháp dưới đây của tôi:

  • Có thể bạn cần tải đối tượng mục Trích dẫn theo id mục
  • Khi bạn muốn đặt giá thì sử dụng setprice (), bạn không thể đặt giá mong muốn cho mặt hàng giỏ hàng đó
$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
cách cập nhật các tùy chọn bổ sung
sivakumar

hi @Amit, Làm cách nào để cập nhật taxAmount cho mặt hàng?, chúng tôi có thể đặt số tiền thuế tùy chỉnh cho từng mục báo giá không?
jafar pinjar

2

Các chức năng bạn đang hỏi về đã được thực hiện trong Magento\Checkout\Controller\Cart\UpdatePost đó được thực thi khi chúng tôi cập nhật giỏ hàng trên trang giỏ hàng của magento. Nó chạy updateItems()chức năng Magento\Checkout\Model\Cartcập nhật các mục trong quote_itembảng. Nó lấy tham số ở dạng mảng $data ['item id of product']['attribute you want to update'].

Vì vậy, bạn có thể gọi updateItems()đối tượng mô hình giỏ hàng và truyền dữ liệu phù hợp để cập nhật các mục. Ngoài ra, nếu bạn không nhận được id mục, bạn có thể lấy nó như thế $this->cart->getQuote()->getAllItems()và sau đó gọi getItemId()vào từng mục.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.