我想过滤产品系列,只显示有库存的商品。我认为这很容易,因为有一个名为'is_salable'的属性,如果有库存则为1(真),否则为0(假)。但无论我做什么,它都行不通。此外,它似乎在查询完成之前停止执行。
以下是一些示例代码:
$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'不是答案,那么我需要做的就是过滤掉没有库存的产品...所以无论做什么都可以。)
谢谢!
答案 0 :(得分:44)
产品中没有is_salable
属性,因此会出现异常。如果您只想显示库存产品,请使用此库存模型addInStockFilterToCollection
方法:
Mage::getSingleton('cataloginventory/stock')->addInStockFilterToCollection($this->_productCollection);
答案 1 :(得分:0)
试试这个......
$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')
按简单产品过滤
答案 2 :(得分:0)
我偶然发现问题isSaleable()总是在我的产品上返回false,问题是我收到了集合但没有将属性价格添加到集合中。 在isSaleable()函数中有一个检查以确保价格不是0,它需要price属性来检查:
更改:
$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();
诀窍:)