Я пытаюсь создать коллекцию продуктов для всех настраиваемых продуктов, которые являются «в запасе» или «пригодны для продажи». Они требуют использования двух разных моделей. Мой рабочий метод:Magento: создайте коллекцию пользовательских продуктов для всех настраиваемых продуктов на складе
$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
Позор они не набирали намек, что ([хотя они могут иметь в более новых версиях] (http://docs.magentocommerce.com/Mage_CatalogInventory/Mage_CatalogInventory_Model_Stock.html#addInStockFilterToCollection)) –
@SteveRobbins Традиционная мудрость это то, что подсказки типов приводятся с накладными расходами на производительность, особенно в старой версии PHP (5.2) цели Magento. Легко понять, почему команда, предлагающая приложение, предназначенное для широкого развертывания, будет бросать подсказки типа в пользу намека на docblock. –