2

In Magento 2, we can update an order data (a data in sales_order) using Magento Sales OrderRepository .

My questions is:

How we can update the sales_order_item data (the qty_invoiced and qty_shipped using order_id?

Can anyone give me at least a way on how to do it or where to start?

  • You can load the model Magento\Sales\Model\Order\Item and can save the data you want. – Amit Naraniwal Feb 21 '19 at 8:32
  • I need to update data using order_id, can you give an example on how to implement it? – fmsthird Feb 21 '19 at 8:33
  • 1
    @magefms Updated the answer as per the requirement. Please check +1 for the effort this question made me to take. – Prathap Gunasekaran Feb 21 '19 at 11:46
3

Try this, In your controller add the following code

<?php                                                         
 namespace Vendor\Module\Controller\Orders;                       
 class SetOrders extends \Magento\Framework\App\Action\Action
 {
  protected $orderItemRepo;
  protected $resultPageFactory;
  protected $itemFactory;
  public function __construct(
    \Magento\Sales\Model\Order\ItemFactory $itemFactory,
    \Magento\Sales\Api\OrderItemRepositoryInterface $orderItem,
    \Magento\Framework\App\Action\Context $context,
    \Magento\Framework\View\Result\PageFactory $resultPageFactory
) {
    $this->itemFactory = $itemFactory;
    $this->orderItemRepo = $orderItem;
    $this->resultPageFactory = $resultPageFactory;
    parent::__construct($context);
}
public function execute()
{
    try {
        //$itemId = 6;
        $orderId = 5;
        $order = $this->itemFactory->create()->getCollection()->addFieldToFilter('order_id', $orderId);
        foreach ($order as $items) {
            $itemId =  $items->getItemId();
            $order = $this->orderItemRepo->get($itemId);
            $order->setAdditionalData('this is custom field');
            $order->save();
        }
        echo "success";
    } catch (\Exception $e) {
        error_log($e->getMessage());
    }
}}

hope this may help and let me know if it works or not.

| improve this answer | |
  • I'll check and inform you if it works – fmsthird Feb 21 '19 at 8:54
  • "Fatal Error: 'Uncaught Error: Call to a member function setCustomField() – fmsthird Feb 21 '19 at 9:04
  • wait I'll try that – fmsthird Feb 21 '19 at 9:10
  • Replace this $order->setCustomField(); with $order->setQtyOrdered(10); This will update the ordered items. – Prathap Gunasekaran Feb 21 '19 at 9:12
  • the same error I got after changing – fmsthird Feb 21 '19 at 9:14

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.