如何从订单项目中获取所选捆绑产品的SKU?
-
16-10-2019 - |
题
我只看到订单项目的product_options属性中选择的产品标题。有什么方法可以获取这些产品的ID或SKU?
解决方案
而不是使用 $order->getAllItems()
使用销售项目集合本身:
$collection = Mage::getResourceModel('sales/order_item_collection')->addFieldToFilter('order_id',array('eq'=>$order_id));
在哪里 $order_id
是个 ENTITY_ID sales_order。
要使用此集合,请迭代它 - 所有项目都可用,甚至是儿童捆绑包和配置的项目 - 例如,可见项目:
foreach($collection as $_item){
var_dump($_item->getSku());
}
其他提示
实际上,有一种方法可以从订单项目中获取选项SKU-而无需加载任何产品。观察!
foreach($order->getAllItems() as $item) {
$options = $item->getProductOptions();
$optionIds = array_keys($options['info_buyRequest']['bundle_option']);
$types = Mage_Catalog_Model_Product_Type::getTypes();
$typemodel = Mage::getSingleton($types[Mage_Catalog_Model_Product_Type::TYPE_BUNDLE]['model']);
$typemodel->setConfig($types[Mage_Catalog_Model_Product_Type::TYPE_BUNDLE]);
$selections = $typemodel->getSelectionsCollection($optionIds, $item);
$selection_map = array();
foreach($selections->getData() as $selection) {
if(!isset($selection_map[$selection['option_id']])) {
$selection_map[$selection['option_id']] = array();
}
$selection_map[$selection['option_id']][$selection['selection_id']] = $selection;
}
$chosen_skus = array();
foreach($options['info_buyRequest']['bundle_option'] as $op => $sel) {
$chosen_skus[] = $selection_map[$op][$sel]['sku'];
}
echo "Item ".Mage::getResourceModel('catalog/product')->
getAttributeRawValue($item->getProductId(), 'sku', $item->getStoreId()).
" has chosen SKUs: ".implode(', ', $chosen_skus)."\n";
}
这些项目存储在sales_flat_order_item表中,作为单独行(项目),项目将parent_item_id字段设置为捆绑产品行的ID。