Magento1: Фильтр Magento коллекции товаров по наличию на складе

Как отфильтровать коллекцию товаров по наличию?

Есть несколько способов фильтра по наличию товаров в Magento. Ниже 3 примера, как отфильтровать коллекцию по наличию товара на складе.

Пример 1

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

Фильтр по наличию “Qty” значению количества товара на складею Но в этом примере нет фильтра по статусу товара на складе “In stock“, “Out of stock“. Для этого потребуется дополнительно делать joinField для поля is_in_stock.

Ниже пример для joinTable.

Пример 2

$products = Mage::getModel('catalog/product')->getCollection();
$products->joinTable(
'cataloginventory/stock_item', 
'product_id=entity_id',
array('qty'=>'qty', 'is_in_stock' => 'is_in_stock'),
'',
'left');
$products->addAttributeToFilter('qty', array('gt' => 0));
$products->addAttributeToFilter('is_in_stock', array('eq' => 0));

Присоединяем к выборке данных таблицу “cataloginventory/stock_item” и указываем какие поля надо добавить array(‘qty’=>’qty’, ‘is_in_stock’ => ‘is_in_stock’). И добавим фильтр по атрибутах.

Пример 3

$products = Mage::getModel('catalog/product')->getCollection();
Mage::getSingleton('cataloginventory/stock')
->addInStockFilterToCollection($products);

В этом примере фильтр коллекции Magento добавлен используя Magento-way (по правильному 🙂 ). Будет фильтр как по Qty (количеству), так и по Status (статусу товара на складе).