我正在尝试建立一个包含所有“库存”或“可销售”的可配置产品的产品集合。这些需要使用两种不同的模型。我的工作方法是:
$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