Magento 1 продажа / сбор заказов с возвратом дубликата заказа

Используя 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 дубликатов в коллекции.

Мне кажется, что я загружаю товары-заказы вместо заказов с данными товаров внутри — хотя, если бы это было так, для меня не имеет смысла, что весь заказ дублируется.

Любой совет будет принят во внимание.

EDIT — Исходный вывод коллекции

Ниже приведен извлеченный и сокращенный вывод структуры коллекции.

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"...
}
}
}
}

Теперь, когда я отформатировал это, я понимаю, что каждый повторный заказ на самом деле не является повторяющейся записью заказа, а имеет дополнительный элемент продукта, добавленный в массив элементов.

1

Решение

Я бы предложил вам не использовать 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);

Затем я бы загрузить элементы заказа с фактическим методом получения getAllItems() а затем посмотрите оттуда:

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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]