Magento – How to set additional data to quote_item table from controller in Magento 2

magento2quotequoteitem

I have a controller with following code

$data = $this->getRequest()->getPostValue();
    $item_id = $data['item_id'];
    $additionalOptions = $data['additional_options'];
    $itemFactory = $this->itemFactory->create()->load($item_id);
    $itemFactory->setAdditionalData($additionalOptions);
    $itemFactory->save();

but it throws following error while saving the quote item data as follows.

Fatal error: Uncaught Error: Call to a member function getStoreId() on
null in
vendor/magento/module-quote/Model/Quote/Item/AbstractItem.php:144
Stack trace: #0

Best Answer

I think you are trying to loading an the model \Magento\Quote\Model\Quote\Item with quote_id parameter, which I think won't work.

What you need to do here is, use the quote_id parameter to load \Magento\Quote\Model\Quote model instance and then pick the right \Magento\Quote\Model\Quote\Item through it and set your data.

So this is what you need to do here.

$quote_id = $data['quote_id'];
$additionalOptions = $data['additional_options'];
$quote = $this->quoteRepository->getById($quote_id);

foreach ($quote->getItems() as $quoteItem) {
    $quoteItem->setAdditionalData($additionalOptions);
}

$quote->save();

Here $this->quoteRepository dependency should be \Magento\Quote\Api\CartRepositoryInterface. Also in the foreach loop, if you want to add further filtering for the quote item, then you should add it too.