фильтрация коллекции товаров на "is_salable" - PullRequest
13 голосов
/ 14 марта 2011

Я хочу отфильтровать коллекцию товаров, чтобы показать только те товары, которые есть в наличии. Я думал, что это будет легко, учитывая, что есть атрибут 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's like it died trying

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

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

Спасибо!

Ответы [ 3 ]

44 голосов
/ 14 марта 2011

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

Mage::getSingleton('cataloginventory/stock')->addInStockFilterToCollection($this->_productCollection);
0 голосов
/ 26 мая 2014

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

Изменение:

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

Кому:

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

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

0 голосов
/ 15 марта 2011

попробуйте и это ...

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

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

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

...