Question

In sales_order_item table, there's a column product_options to store some custom values.

I need to get the deliverydates from the following value (value from the db column product_options)

{"info_buyRequest":{"qty":"1","super_attribute":{"137":"2803","93":"17717"},"product":"37702","deliverydates":"2018-04-07"}}

I have tried the following code, but is not working.

    foreach ($this->order->getAllVisibleItems() as $orderItem) {
        $options = $orderItem->getProductOptions(); 
        #$options = $orderItem->getProduct()->getTypeInstance(true)->getOrderOptions($orderItem->getProduct());
        if(!empty($options['options'])) {        
            foreach ($options['options'] as $option) {
                if ($option['label'] == 'deliverydates'){
                    $deliverydate = $option['value'];
                }
            }
        }
Was it helpful?

Solution

Based on your json, you cannot get the delivery dates by options key, you have to use info_buyRequest, Try this

foreach ($this->order->getAllVisibleItems() as $orderItem) {
     $options = $orderItem->getProductOptions(); 
        if(!empty($options['info_buyRequest'])) {
            if(!empty($options['info_buyRequest']["deliverydates"])) {
                $deliverydates = $options['info_buyRequest']["deliverydates"];
             }
        }
}

OTHER TIPS

Use this code to get product attribute for product items in Order.

$orderAllItems = $this->order->getAllItems();
foreach ($orderAllItems as $orderItem) {
    $options = $orderItem->getProductOptions();
    if ($options) {
        $info = $options['info_buyRequest'];
    }
}

You can get all custom options from $info.

you can use below code to get all configurable product options from order

   $opts=array();
   $items = $order->getAllVisibleItems();
      foreach ($items as $item) 
      {       
        $options = $item->getProductOptions();          
        if (isset($options['attributes_info']) && !empty($options['attributes_info'])) 
        {             
        foreach ($options['attributes_info'] as $option) 
        {      
             $opts[strtolower($option['label'])] = $option['value'];   
        }

        }
      }
   print_r($opts);
Licensed under: CC-BY-SA with attribution
Not affiliated with magento.stackexchange
scroll top