web-dev-qa-db-ja.com

Magento:コレクションに制限を設定

私が見つけようとしたのは、コレクションに制限を設定する方法でした。Googleで見つけた答えは、setPage($ pageNum、$ pageSize)を持つカタログでのみ利用できました。他のコレクションでは機能しませんでした。
以下の回答をご覧ください。

37
Shadowbob

これを行うにはいくつかの方法があります。

$collection = Mage::getModel('...')
            ->getCollection()
            ->setPageSize(20)
            ->setCurPage(1);

最初の20レコードを取得します。

これが代替手段であり、おそらくより読みやすい方法です:

$collection = Mage::getModel('...')->getCollection();
$collection->getSelect()->limit(20);

これにより、Zend Db limitが呼び出されます。 2番目のパラメーターとしてオフセットを設定できます。

118
freento

その方法は、関数setPage($pageNum, $pageSize)のMagento 1.7.2の380行でcode/core/Mage/Catalog/Model/Resource/Category/Flat/Collection.phpのコードを見ることでした。

 $collection = Mage::getModel('model')
     ->getCollection()
     ->setCurPage(2) // 2nd page
     ->setPageSize(10); // 10 elements per pages

これが誰かの助けになることを願っています。

11
Shadowbob

注文コレクションの制限:

$orderCollection = Mage::getResourceModel('sales/order_collection'); 
$orderCollection->getSelect()->limit(10);
$orderModel = Mage::getModel('sales/order');

foreach ($orderCollection->getItems() as $order) :
   $order =   $orderModel->load($order['entity_id']);
   echo $order->getId().'<br>'; 
endforeach; 
4

これも実装できます:setPage(1、n);ここで、n =任意の数字。

$products = Mage::getResourceModel('catalog/product_collection')
                ->addAttributeToSelect('*')
                ->addAttributeToSelect(array('name', 'price', 'small_image'))
                ->addFieldToFilter('visibility', Mage_Catalog_Model_Product_Visibility::VISIBILITY_BOTH) //visible only catalog & searchable product
                ->addAttributeToFilter('status', 1) // enabled
                ->setStoreId($storeId)
                ->setOrder('created_at', 'desc')
                ->setPage(1, 6);
1
Vishal Thakur