Home » Php » php – Magento : How to get qty of a specific product in an order item?

php – Magento : How to get qty of a specific product in an order item?

Posted by: admin July 12, 2020 Leave a comment

Questions:

I have this script to help me get the QTY of a specific product from an order item in Magento 1.6. This should be visualized in a simple table. This is my code so far:

// Load the product collection
$collection = Mage::getModel('catalog/product')
 ->getCollection()
 ->addAttributeToSelect('*');

foreach ($collection as $product) {
    $id = $product->getId();
    $product_name = $product->getName();

    $order_output = '';
    $order_output .= '<table style="width: 500px">';
        $order_output .= '<tr><td colspan="3"><strong>'.$product_name.'</strong></td></tr>';
        $order_output .= '<tr><td><strong>Order id</strong></td><td><strong>Total price</strong></td><td><strong>Qty</strong></td><td><strong>Customer name</strong></td></tr>';

        // Get all unique order IDs for items with specifix product ID
        $time = time();
        $to = date('Y-m-d H:i:s', $time);
        $from = date('2012-07-01 08:00:00');
        $orderItems = Mage::getResourceModel('sales/order_item_collection')
        ->addAttributeToFilter('product_id', $id)
        ->addAttributeToFilter('created_at', array('from' => $from, 'to' => $to))
        ->addAttributeToSelect('order_id')
        ->load();

        foreach ($orderItems as $order) {
             $order_data = Mage::getModel('sales/order')->load($order['order_id']);
             $items = $order_data->getColletion();
             $order_id = $order['order_id'];
             $total = $order_data->getGrandTotal();
             $customer_name = $order_data->getCustomerName();

             foreach ($items as $item) {
                $product_id = $item->getProductId();
                if ($product_id == $id) {
                    $number_of_prod =  $item->getQtyOrdered();
                }       
             }

             $order_output .= '</tr>';
                $order_output .= '<td width="20%" align="left">'.$order_id.'</td>';
                $order_output .= '<td width="20%">'.number_format($total, 2, '.', '').' RMB</td>';
                $order_output .= '<td width="20%">'.$number_of_prod.'</td>';
                $order_output .= '<td width="40%">'.$customer_name.'</td>';
             $order_output .= '</tr>';     
        }
    $order_output .= '</table>';

    header ("Content-Type: text/html; charset=UTF-8");
    echo $order_output;
}

Everything is populating correctly and the only thing missing is the QTY. You can see the attached image for the output.

Any help is greatly appreciated.

enter image description here

UPDATE

When I use:

$items = $order_data->getAllItems();

I get the Qty but now all the orders of respective products is not listed.

How to&Answers:

Have you tried the alternate methods to get the qty ordered?

$item->getData('qty_ordered');

or

$item['qty_ordered'];

Answer:

There is another simple function for this :

$item->getQtyOrdered();