按数量过滤收集

s4l*_*ish 2 collections filter magento

我尝试按数量过滤集合: $_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));
Run Code Online (Sandbox Code Playgroud)

entityId数组是空的,但$ _productCollection仍然返回产品?!

Ste*_*ins 5

说明:

你第二次尝试就接近了.有一种特殊的方法可以添加数量过滤器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));
}
Run Code Online (Sandbox Code Playgroud)

解:

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

$products = Mage::getModel('catalog/product')
    ->getCollection()
    ->addIdFilter($stockIds)
    ->setPageSize(10);
Run Code Online (Sandbox Code Playgroud)