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-2
stellen 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.
Antworten:
Ich bin mir bei meiner folgenden Lösung nicht sicher:
quelle
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 dieupdateItems()
Funktion ausgeführtMagento\Checkout\Model\Cart
, Elemente in derquote_item
Tabelle 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 danngetItemId()
jeden Artikel aufrufen .quelle