Фильтрация коллекции продуктов на "is_salable"

Я хотел бы отфильтровать коллекцию продуктов, чтобы показать только те товары, которые есть на складе. Я думал, что это будет легко, учитывая, что атрибут "is_salable" равен 1 (true), если он на складе, 0 (false), если нет. Но независимо от того, что я делаю, это не сработает. Кроме того, он, кажется, останавливает выполнение запроса до его завершения.

Вот пример кода:

$this->_productCollection = Mage::getModel('catalog/product')->getCollection();
$this->_productCollection->addAttributeToSelect('*');
$this->_productCollection->addAttributeToFilter('my_attribute', true);
//So far, so good...filtering on 'my_attribute' works!
Mage::Log("select: " . $this->_productCollection->getSelect());
//Successfully outputs the SQL query
$this->_productCollection->addFieldToFilter('is_salable', '1');
Mage::Log("select: " . $this->_productCollection->getSelect());
//does NOT output any query...it like it died trying

Так что я делаю неправильно? Я пробовал "addFieldToFilter", "addAttributeToFilter" и другие другие запросы, такие как: addFieldToFilter('is_salable', array('eq' => true)) и т.д.

Кто-нибудь знает, как это сделать? Если "is_salable" не является ответом, все, что мне нужно сделать, это отфильтровать продукты, которые не находятся на складе... так что все, что работает, было бы хорошо:)

Спасибо!

Ответы

Ответ 1

В продукте нет атрибута is_salable, чтобы он создавал исключение. Если вы хотите отображать только те продукты, которые находятся на складе, используйте метод запаса addInStockFilterToCollection:

Mage::getSingleton('cataloginventory/stock')->addInStockFilterToCollection($this->_productCollection);

Ответ 2

попробуйте это также...

$stockCollection = Mage::getModel('cataloginventory/stock_item')->getCollection()->addFieldToFilter('qty', array('gteq' => 1))->addFieldToFilter('type_id', 'simple');

addFieldFilter ('qty', array ('gteq' = > 1))

получите всю коллекцию продуктов, имеющую запас 1 или больше, вы можете поместить любое количество здесь в соответствии с вашими потребностями.

addFieldToFilter ('type_id', 'simple')

фильтр простыми продуктами

Ответ 3

Я наткнулся на проблему, которая isSaleable() всегда возвращает false на мои продукты, проблема в том, что я получал коллекцию, но не добавлял цену атрибута в коллекцию. В функции isSaleable() есть проверка, чтобы убедиться, что цена не равна 0, для этого требуется атрибут цены, чтобы проверить, что так:

Изменение:

$collection = Mage::getModel('catalog/product')->getCollection();
        $collection->addAttributeToSelect('name')
                ->addAttributeToSelect('image')
                ->addAttributeToSelect('url_path')
                ->addAttributeToSelect('status')
                ->addUrlRewrite();

To:

$collection = Mage::getModel('catalog/product')->getCollection();
        $collection->addAttributeToSelect('name')
                ->addAttributeToSelect('image')
                ->addAttributeToSelect('price')
                ->addAttributeToSelect('url_path')
                ->addAttributeToSelect('status')
                ->addUrlRewrite();

Сделал трюк:)