2013-01-14 62 views
35

我試圖找出的問題是我們如何設置集合上的限制,我在Google上找到的答案僅適用於具有setPage的目錄($ pageNum,$ pageSize )。這不適用於其他任何收藏。
請參閱下面的答案。Magento:在集合上設置LIMIT

回答

107

有幾種方法可以做到這一點:

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

會得到前20條記錄。

這裏是另類,也許更可讀的方式:

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

這將調用Zend的Db的限制。您可以將偏移量設置爲第二個參數。

+0

限制僅限於Catalog,如果您自己創建模塊,則必須在集合中實現該功能,並且「limit(20)= LIMIT 0,20」而不是「LIMIT 20,20」如何更改頁面?第一個解決方案是我在下面的解決方案。 – Shadowbob

+1

$ collection-> getSelect() - > limit(20,20); // LIMIT 20,20 OR $ collection = Mage :: getModel('...') - > getCollection() - > setPageSize(20) - > setCurPage(2); // LIMIT 20,20 – freento

+1

$ collection-> getSelect() - > limit(20,20);將適用於每一個收藏。請參閱Zend DB Select,Magento向DB查詢的基礎。 – freento

10

做的方式是在code/core/Mage/Catalog/Model/Resource/Category/Flat/Collection.php在電線380在Magento 1.7.2看代碼的功能setPage($pageNum, $pageSize)

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

我希望這會幫助別人。

+0

或只是'$收藏 - > setPage($頁次,$的pageSize);' –

+1

+帕維爾沒有setPage僅適用於目錄,我需要目錄外的像我的問題解釋。 – Shadowbob

4

指令集極限:

$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; 
+0

哇...繼續... –

+2

您的示例正在工作,但永遠不會使用foreach從集合中加載單個實體。這是一個集合用於!所以最好刪除你的foreach中的前兩行......它只會工作,但速度更快,更具可擴展性! –

+0

嗯!在循環查詢 – itsazzad

1

可以實現,這也: - 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);