Magento 2: оновлення пункту цитат


10

Я намагаюся оновити пункт цитати в 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вони встановлюють весь продукт ... не намагаючись оновити його. Якщо ви встановите продукт, новий товарний пункт, безумовно, генерує. Але навіщо це робити те саме у разі оновлення.


2
Можливий дублікат того, як зберегти цитати у магенто 2
Анкіт Шах

1
Не те саме. Я відредагував своє запитання. @AnkitShah, будь ласка, перевір.
Кінгшук Деб

Для Magento 2.2+ зверніться до цього - magento.stackexchange.com/a/182152/4492
Rohan Patil

Відповіді:


16

Я не впевнений у своєму нижченаведеному рішенні:

  • Можливо, вам потрібно буде завантажити об'єкт "Цитувати" за ідентифікатором елемента
  • Оскільки ви хочете встановити ціну, використовуючи setPrice (), ви не можете встановити бажану ціну для цього товару в кошику
$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
як оновити додаткові параметри
sivakumar

привіт @Amit, як оновити податкову суму для товару? Чи можемо ми встановити власну суму податку для окремого предмета котирування?
jafar pinjar

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()по кожному елементу.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.