我只看到订单项目的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。

许可以下: CC-BY-SA归因
scroll top