我使用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数组中添加了另一个产品。
答案 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() ...
}