Как отфильтровать коллекцию товаров по наличию?
Есть несколько способов фильтра по наличию товаров в 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 (статусу товара на складе).