Я пытаюсь обновить пункт цитаты в magento2. Но каждый раз, когда я сохраняю элемент, он создает новый элемент с тем же идентификатором цитаты, а не обновляет его. Вот мой код
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();
}
}
Но каждый раз при сохранении элемента ... создается новый элемент. Не знаю почему. Также I couldn't find any class which explicitly load qoute item in magento2
. Помощь будет оценена.
В этом вопросе /magento/139298/how-to-save-quote-items-in-magento-2
они задают весь продукт ... не пытаясь обновить его. Когда вы устанавливаете продукт, обязательно сгенерируется новый элемент цитаты. Но почему он делает то же самое в случае обновления.
Ответы:
Я не уверен насчет моего решения ниже:
источник
Функциональность, о которой вы спрашиваете, уже выполнена,
Magento\Checkout\Controller\Cart\UpdatePost
которая выполняется, когда мы обновляем корзину на странице корзины magento. Он запускаетupdateItems()
функциюMagento\Checkout\Model\Cart
обновления элементов вquote_item
таблице. Он принимает параметр в виде массива$data ['item id of product']['attribute you want to update']
.Таким образом, вы можете вызвать
updateItems()
объект модели корзины и передать данные соответствующим образом для обновления элементов. Также, если вы не получаете идентификатор элемента, вы можете получить его как,$this->cart->getQuote()->getAllItems()
а затем вызватьgetItemId()
каждый элемент.источник