getAllVisibleItems(),getAllItems返回两次项

Mat*_*Mat 2 magento magento-1.7

我正在尝试做一些非常简单的事情 - 从订单中获取物品.Magento 1.7似乎为此提供了三个功能.

  • getAllItems():这将返回所有项目两次.返回的项目类型简单(不可配置)
  • getItemsCollection():同上
  • getAllVisibleItems():同上

我在其他地方读到的许多答案都指出这个问题是由"父"和"子"产品引起的,但我的数据库中没有.我检查了定义父/子关系的表,它们都是空的.

这是我正在运行的代码:

        $order = Mage::getModel("sales/order")->load($order_id, 'increment_id'); //load order by order id

        $ordered_items = $order->getAllVisibleItems();
        //$ordered_items = $order->getAllItems();
        //$ordered_items = $order->getItemsCollection();

        foreach($ordered_items as $item)
        {
            if($this->debug)
            {
                echo $item->getItemId()."</br>";
                echo $item->getProductId()."</br>";
                echo $item->getSku()."</br>";
                echo $item->getQtyOrdered()."</br>";
                echo $item->getName()."</br>";
            }

            echo("*************************************************</br>");

        }

And the output is 
6
934
1003
1.0000
ProductA
*************************************************
6
934
1003
1.0000
ProductA
*************************************************
Run Code Online (Sandbox Code Playgroud)

你可以看到输出的第一个数字是实际的entity_id - 所以我得到了同一个项目的真正重复?

小智 5

你必须使用这段代码

$order = Mage::getModel("sales/order")->load($order_id, 'increment_id');
$_items = $order->getItemsCollection();

 foreach ($_items as $item) {
    if ($item->getParentItem()) continue;
    //do something
    echo $item->getSku();
}
Run Code Online (Sandbox Code Playgroud)