Magento 1 продажа / сбор заказов с возвратом дубликата заказа - PullRequest
0 голосов
/ 05 декабря 2018

Используя 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"
                                ...
                        }
                    }
                }
        }

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

1 Ответ

0 голосов
/ 05 декабря 2018

Я бы посоветовал вам не использовать 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() ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...