使用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)
,在这个循环中,我想循环通过产品foreach($order['items']
作为$item))
我不明白为什么要返回集合中相同顺序的多个副本。重复订单的数量似乎与订单中的产品数量相关--因此,在订单中购买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数组中添加了一个额外的产品项。
发布于 2018-12-05 14:14:31
我建议你不要直接使用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() ...
}
https://stackoverflow.com/questions/53634089
复制相似问题