SOLVED - Magento 2 Get product_options value from sales_order_item
-
07-01-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
.
Licensed under: CC-BY-SA with attribution
Not affiliated with magento.stackexchange