Search code examples
magentofiltermagento-1.3

Magento (CE 1.3) - Filter productCollection where stock quantity is 0


Magento 1.3

I'm trying to filter out of stock items from the productCollection. Using:

 ->addAttributeToFilter('status',array('neq' => Mage_Catalog_Model_Product_Status::STATUS_DISABLED))

I can filter by status, but in this store , enabled products can still have 0 quantity.

Using:

->addAttributeToFilter('qty', array('gt' => 0))

returns a 'qty' is not an attribute error.

$this->_productCollection = $this->_productCollection->addAttributeToSelect('*')
                            ->setStoreId($storeId)
                            ->addStoreFilter($storeId)
                            ->addAttributeToFilter('status',array('neq' => Mage_Catalog_Model_Product_Status::STATUS_DISABLED))                              
                            ->setPageSize($this->getToolbarBlock()->getLimit());

Any ideas? Thanks.


Solution

  • You could use something like this:

    $oCollection = Mage::getModel('catalog/product')
    ->getCollection()
    ->joinField(
        'qty',
        'cataloginventory/stock_item',
        'qty',
        'product_id=entity_id',
        '{{table}}.stock_id=1',
        'left'
    )
    ->addAttributeToFilter('qty', array('eq' => 0));
    

    In case you need no catalog/product data at all (except the product id), but only want to know which product ids have a quantity of zero in general, you also could use:

    $oCollection = Mage::getModel('cataloginventory/stock_item')
    ->getCollection()
    ->addQtyFilter('=', 0);