我正在尝试构建一个产品集合,其中包含所有“有库存”或“可销售”的可配置产品。这需要使用两种不同的模型。我的工作方法是:
$collectionConfigurable = Mage::getResourceModel('catalog/product_collection')->addAttributeToFilter('type_id', array('eq' => 'configurable'));
foreach ($collectionConfigurable as $_configurableproduct) {
$product = Mage::getModel('catalog/product')->load($_configurableproduct->getId());
if ($product->isSaleable()) {
// do something
}
}
然而,这个脚本非常慢,我有一种感觉它在浪费资源,因为它将加载并遍历每个可配置产品。
我想要实现的目标是获取$collectionConfigurable,并仅使其成为有库存的商品。
另一个资源引用了这个方法来获取有库存的商品。
Mage::getSingleton('cataloginventory/stock')->addInStockFilterToCollection($this->_productCollection);
但我不确定如何将它们组合或正确使用,我尝试了这个代码:
$collectionConfigurable = Mage::getResourceModel('catalog/product_collection')->addAttributeToFilter('type_id', array('eq' => 'configurable'));
$instockConfigs = Mage::getSingleton('cataloginventory/stock')->addInStockFilterToCollection($collectionconfigurable);
这会返回以下错误:
Fatal error: Call to a member function joinField() on a non-object in /srv/magento/app/code/core/Mage/CatalogInventory/Model/Resource/Stock.php on line 197