Próbuję zaktualizować wycenę przedmiotu w Magento2. Ale za każdym razem, gdy zapisuję element, tworzę nowy element z tym samym identyfikatorem cytatu, zamiast go aktualizować. Oto mój kod
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();
}
}
Ale za każdym razem, gdy zapisujesz element ... generowany jest nowy element. Nie wiem dlaczego. Również I couldn't find any class which explicitly load qoute item in magento2
. Pomoc będzie mile widziana.
W tym pytaniu /magento/139298/how-to-save-quote-items-in-magento-2
ustawiają cały produkt ... nie próbując go aktualizować. Po ustawieniu produktu z pewnością wygeneruje się nowy element oferty. Ale dlaczego robi to samo w przypadku aktualizacji.
Odpowiedzi:
Nie jestem pewien co do mojego poniższego rozwiązania:
źródło
Funkcjonalność, o którą pytasz, jest już gotowa, w
Magento\Checkout\Controller\Cart\UpdatePost
trakcie której aktualizujemy koszyk na stronie koszyka w Magento. DziałaupdateItems()
funkcjaMagento\Checkout\Model\Cart
aktualizacji pozycji wquote_item
tabeli. Przyjmuje parametr w postaci tablicy$data ['item id of product']['attribute you want to update']
.Możesz więc wywołać
updateItems()
obiekt modelu wózka i odpowiednio przekazać dane, aby zaktualizować przedmioty. Jeśli nie otrzymujesz identyfikatora przedmiotu, możesz go uzyskać,$this->cart->getQuote()->getAllItems()
a następnie wywołaćgetItemId()
każdy przedmiot.źródło