2013-05-02 2 views
1

Я пытаюсь построить массив заказов => продуктов, которые я могу использовать в атрибутах отчетности/обновления. Формат Я иду в:Получить количество заказов на продукт

//$orders[<number of orders>] = <array of product ids with this many orders> 
$orders = array(
    1 => array(1, 2, 3), 
    2 => array(4, 5) 
    //etc 
); 

До сих пор лучшее, что я могу сделать, это

$productCollection = Mage::getModel('catalog/product') 
    ->addAttributeToSelect("sku") 
    ->getCollection(); 

$orders = array(); 

foreach ($productCollection as $product) { 

    $ordered = Mage::getResourceModel('reports/product_collection') 
     ->addOrderedQty() 
     ->addAttributeToFilter('sku', $product->getSku()) 
     ->setOrder('ordered_qty', 'desc') 
     ->getFirstItem(); 

    $qtyOrdered = $ordered->getOrderedQty(); 
    $total = $this->_counter - (int)(!$ordered ? 0 : $qtyOrdered); 

    if (!is_array($orders[$total])) { 

     $orders[$total] = array(); 
    } 

    $orders[$total][] = $product->getId(); 
} 

Но это, очевидно, использует много ресурсов, загружая всю коллекцию изделий.

Я думаю, что я могу получить только с помощью

$ordered = Mage::getResourceModel('reports/product_collection') 
    ->addOrderedQty(); 

Но у меня возникают проблемы возвращения/переборе результатов. Как получить информацию, которую я ищу?

ответ

0

Это должно быть лучше.

$orderItems = Mage::getResourceModel('sales/order_item_collection'); 

$result = array(); 
foreach ($orderItems as $item) { 
    $result[$item->getOrderId()][] = $item->getProductId(); 
} 

print_r($result); 

ПРИМЕЧАНИЕ: заботиться о спрятан позиции заказа (Ex: простой, настраиваемый продукт)

+0

Не заказ 'orderId', сколько раз продукт был заказан. –

0
$ordered = Mage::getResourceModel('reports/product_collection') 
    ->addOrderedQty(); 

foreach($ordered as $order) { 
    $qtyOrdered = (int)$order->getOrderedQty(); 
    if (!is_array($totals[$qtyOrdered])) { 
     $totals[$qtyOrdered] = array(); 
    } 
    $totals[$qtyOrdered][] = $order->getEntityId();    
} 

Работает, но это, кажется, возвращение Идентификаторы продукта, что не существует больше.

Смежные вопросы