Pergunta

Eu estou fazendo um Mage::getModel chamada para tentar obter todos os produtos de uma determinada categoria que está em estoque.

$stockIds = Mage::getModel('cataloginventory/stock_item')
    ->getCollection()
    ->addQtyFilter('<=',1)
    ->addFieldToFilter('is_in_stock', 1)
    ->getAllIds();

$_productCollection=Mage::getModel('catalog/category')
    ->load(51)
    ->getProductCollection()
    ->addIdFilter($stockIds)
    ->addAttributeToSelect('*')
    ->setPageSize(10)->setCurPage(1);

Tudo o que funciona para além do ->addFieldToFilter('is_in_stock', 1) linha.Sem ele, todos os produtos da categoria de mostrar-se.Com ele, é a filtragem de alguns (aparentemente aleatória) produtos, mas não com base em se é "Em estoque".Alguns fora-de-estoque de itens ainda aparece, e alguns itens em estoque não aparecem.

Tenho verificado que todos os produtos estão habilitados e todas as quantidades são, pelo menos, 10.

Como faço para obter todos os produtos de uma determinada categoria que está no estoque?

Foi útil?

Solução

primeiro,$stockIds não devolver o product ids ,ela dá o estoque de identificação,basicamente, de ações chave primária da tabela.Se você deseja filter product collection by saleable em seguida, você precisa utilizar o código abaixo:

Mage::getSingleton('cataloginventory/stock')->addInStockFilterToCollection($_productCollection)
Licenciado em: CC-BY-SA com atribuição
Não afiliado a magento.stackexchange
scroll top