0

Magento で最近販売された 5 つのユニークなアイテムを取得したいのですが、以下のコード スニペットがあります。空白のページが表示されています->getSelect()->group('product_id')が、以下のコードから削除すると機能しますが、アイテムは一意ではなくなります。

   $itemsCollection= Mage::getResourceModel('sales/order_item_collection')
        ->join('order', 'order_id=entity_id')   
        ->getSelect()->group('product_id')
        ->setOrder('order_id', 'desc')
        ->setPage(1, 5) ;

これらの製品でグループ化するにはどうすればよいですか?

4

1 に答える 1

2

コードはほぼ正しいです。問題は、メソッド呼び出しを連鎖させる方法にあります。

メソッド呼び出しをチェーンする場合、各呼び出しはオブジェクト (通常は同じクラスへの参照) を返します。したがって、あなたの例では、 ->getSelect()and呼び出しで問題が発生しました。これらは、期待どおりのオブジェクトではなく、オブジェクト->group()への参照を返すためです。Varien_Db_SelectMage_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/>';
}
于 2012-08-10T10:24:00.260 に答える