2013-08-06 150 views
1

我嘗試按數量篩選集合: $_productCollection->addAttributeToFilter('qty', array('gt' => 30)); 但這不起作用。數量篩選器集合

有人可以給我一個提示,按數量過濾產品收集?

我也試過:

$stockCollection = Mage::getModel('cataloginventory/stock_item')->getCollection() 
          ->addFieldToFilter('qty', array('gt' => 99999999)); 
$entityIds = array(); 
foreach ($stockCollection as $item) { 
    $entityIds[] = $item->getOrigData('product_id'); 
} 

$_productCollection->addAttributeToFilter('id', array('in' => $entityIds)); 

的ENTITYID數組爲空,但$ _productCollection仍然返回產品?

回答

4

說明:

您已經接近第二次嘗試。還有用於添加數量過濾器的特殊方法在Mage_CatalogInventory_Model_Resource_Stock_Item_Collection

/** 
* Add filter by quantity to collection 
* 
* @param string $comparsionMethod 
* @param float $qty 
* @return Mage_CatalogInventory_Model_Resource_Stock_Item_Collection 
*/ 
public function addQtyFilter($comparsionMethod, $qty) 
{ 
    $methods = array(
     '<' => 'lt', 
     '>' => 'gt', 
     '=' => 'eq', 
     '<=' => 'lteq', 
     '>=' => 'gteq', 
     '<>' => 'neq' 
    ); 
    if (!isset($methods[$comparsionMethod])) { 
     Mage::throwException(
      Mage::helper('cataloginventory')->__('%s is not a correct comparsion method.', $comparsionMethod) 
     ); 
    } 

    return $this->addFieldToFilter('main_table.qty', array($methods[$comparsionMethod] => $qty)); 
} 

解決方法:

$stockIds = Mage::getModel('cataloginventory/stock_item') 
    ->getCollection() 
    ->addQtyFilter('>=', 30) 
    ->getAllIds(); 

$products = Mage::getModel('catalog/product') 
    ->getCollection() 
    ->addIdFilter($stockIds) 
    ->setPageSize(10); 
+0

非常感謝! – Magefast