Magento 1销售/订单集合返回重复订单

时间:2018-12-05 14:01:57

标签: php magento magento-ee

我使用Magento 1.14.3.4,尝试按以下方式导出所有新订单和订单商品:

$orders = Mage::getModel('sales/order')
    ->getCollection()
    ->addAttributeToSelect('*')
    ->addAttributeToFilter('created_at', array('from' => $date_from,'to' => $date_to))
    ->addAttributeToFilter('status', array('nin' => array('canceled', 'pending_payment', 'holded')))
    ->load();

我想遍历订单foreach($orders as $order),然后在该循​​环内以$ item遍历产品foreach($order['items']

我不知道为什么这会返回集合中相同顺序的多个副本。重复订单的数量似乎与订单中的产品数量相关-因此,购买了9种产品的订单在集合中将有9个重复商品。

在我看来,我正在加载订单商品,而不是加载其中包含商品数据的订单-尽管在这种情况下,重复整个订单对我来说没有任何意义。

任何建议将不胜感激。

编辑-收集源输出

下面是集合结构的提取和精简输出。

array(164) {
    [115]=>
        array(32) {
            ["id"]=>string(9) "100083056"
            ...
            ["account"]=>array(12) {...}
            ["billing_address"]=>array(13) {...}
            ["shipping_address"]=>array(13) {...}
            ["items"]=>
                array(1) {
                    [0]=>
                        array(22) {
                            ["item_id"]=>string(6) "194844"
                            ...
                    }
                }
            }
        }
    [116]=>
        array(32) {
            ["id"]=>string(9) "100083056"
            ...
            ["account"]=>array(12) {...}
            ["billing_address"]=>array(13) {...}
            ["shipping_address"]=>array(13) {...}
            ["items"]=>
                array(2) {
                    [0]=>
                        array(22) {
                            ["item_id"]=>
                                string(6) "194844"
                                ...
                        }
                    [1]=>
                        array(22) {
                            ["item_id"]=>
                            string(6) "194845"
                            ...
                        }
                    }
                }
    [117]=>
        array(32) {
            ["id"]=>string(9) "100083056"
            ...
            ["account"]=>array(12) {...}
            ["billing_address"]=>array(13) {...}
            ["shipping_address"]=>array(13) {...}
            ["items"]=>
                array(3) {
                    [0]=>
                        array(22) {
                            ["item_id"]=>
                                string(6) "194844"
                                ...
                        }
                    [1]=>
                        array(22) {
                            ["item_id"]=>
                                string(6) "194845"
                                ...
                        }
                    [2]=>
                        array(22) {
                            ["item_id"]=>
                                string(6) "194846"
                                ...
                        }
                    }
                }
        }

现在,我已经对此进行了格式化,我意识到,每个重复的订单实际上并不是重复的订单记录,而是在items数组中添加了另一个产品。

1 个答案:

答案 0 :(得分:0)

我建议您不要直接使用load(),因为您不知道集合的实际大小。您可以按如下步骤逐步加载此集合的项目(这样更便于存储):

$orders = Mage::getModel('sales/order')
->getCollection()
->addAttributeToSelect('*')
->addAttributeToFilter('created_at', array('from' => $date_from,'to' => $date_to))
->addAttributeToFilter('status', array('nin' => array('canceled', 'pending_payment', 'holded')));
$orders->setPageSize(100); //N orders per loop



$pages = $orders->getLastPageNumber();
$currentPage = 1;
do{
    $orders->setCurPage($currentPage);
    $orders->load();
    foreach ($orders as $order){
        //here you can do things with a single order
    }
    $orders->clear();
    $currentPage++;
} while ($currentPage <= $pages);

接下来,我将使用实际的getter方法getAllItems()加载订单商品,然后从那里查看:

foreach($order->getAllItems() as $orderItem) {
 // $orderItem->getName() ...
}