Magento 2: Aktualisieren des Angebotselements


10

Ich versuche, das Angebot in magento2 zu aktualisieren. Aber jedes Mal, wenn ich den Artikel speichere, wird ein neuer Artikel mit derselben Angebots-ID erstellt, anstatt ihn zu aktualisieren. Hier ist mein Code

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

Aber jedes Mal, wenn ein Artikel gespeichert wird, wird ein neuer Artikel generiert. Ich weiß nicht warum. Auch I couldn't find any class which explicitly load qoute item in magento2. Hilfe wird geschätzt.

In dieser Frage /magento/139298/how-to-save-quote-items-in-magento-2stellen sie das gesamte Produkt ein ... und versuchen nicht, es zu aktualisieren. Wenn Sie ein Produkt festlegen, wird mit Sicherheit ein neuer Angebotsposten generiert. Aber warum macht es das gleiche im Falle einer Aktualisierung.



1
Nicht gleich. Ich habe meine Frage bearbeitet. @ AnkitShah bitte überprüfen.
Kingshuk Deb

Informationen zu Magento 2.2+ finden Sie hier - magento.stackexchange.com/a/182152/4492
Rohan Patil

Antworten:


16

Ich bin mir bei meiner folgenden Lösung nicht sicher:

  • Möglicherweise müssen Sie das Objekt für Angebotselemente nach Artikel-ID laden
  • Wie Sie Setpreis wollen dann mit Setpreis () Sie können Ihren Wunschpreis für diesen Warenkorb Artikel nicht gesetzt
$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
wie man zusätzliche Optionen aktualisiert
sivakumar

hi @Amit, Wie aktualisiere ich den Steuerbetrag für den Artikel? Können wir einen benutzerdefinierten Steuerbetrag für den einzelnen Angebotsposten festlegen?
Jafar Pinjar

2

Die Funktionalität, nach der Sie fragen, ist bereits Magento\Checkout\Controller\Cart\UpdatePost ausgeführt und wird ausgeführt, wenn wir den Warenkorb auf der Warenkorbseite von Magento aktualisieren. Es wird die updateItems()Funktion ausgeführt Magento\Checkout\Model\Cart, Elemente in der quote_itemTabelle zu aktualisieren . Es nimmt Parameter in Form eines Arrays an $data ['item id of product']['attribute you want to update'].

Sie können also updateItems()das Modellmodell des Einkaufswagens aufrufen und die Daten entsprechend weitergeben, um die Artikel zu aktualisieren. Wenn Sie keine Artikel-ID erhalten, können Sie diese auch erhalten $this->cart->getQuote()->getAllItems()und dann getItemId()jeden Artikel aufrufen .

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.