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.

Kingshuk Deb
quelle
2
Mögliches Duplikat von So speichern Sie Angebotselemente in Magento 2
Ankit Shah
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(); 
Amit Bera
quelle
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 .

Vivek Kumar
quelle