SOLVED - Magento 2 Get product_options value from sales_order_item
-
15-04-2021 - |
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'];
}
}
}
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