2013-08-06 100 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