コードはほぼ正しいです。問題は、メソッド呼び出しを連鎖させる方法にあります。
メソッド呼び出しをチェーンする場合、各呼び出しはオブジェクト (通常は同じクラスへの参照) を返します。したがって、あなたの例では、 ->getSelect()
and呼び出しで問題が発生しました。これらは、期待どおりのオブジェクトではなく、オブジェクト->group()
への参照を返すためです。Varien_Db_Select
Mage_Sales_Model_Resource_Order_Item_Collection
(また、最新の注文については、order_id ではなく、created_at で注文する方が安全です)。
したがって、実際の例は次のようになります...
// Initialise the collection
$itemsCollection = Mage::getModel('sales/order_item')->getCollection()
->setOrder('created_at', Varien_Data_Collection::SORT_ORDER_DESC)
->addAttributeToSelect('*') //Change this to only select the fields you require
->setPage(1, 5)
;
// Separately add the GROUP BY clause
$itemsCollection->getSelect()->group('product_id');
// Now you can safely iterate over the collection
foreach($itemsCollection as $item) {
echo $item->getData('product_id') . ' - ' . $item->getData('created_at') . '<br/>';
}