Obter quantidade de estoque de produto em magento

12

Preciso obter a quantidade de estoque do produto para o item, como obtê-lo

$products = Mage::getModel('catalog/product')->getCollection();
$products->addAttributeToSelect(array('name', 'thumbnail', 'weight' ,'price','description'));

foreach ($products as $product) {
    $p['products'][] = array(
        'id'        => $product->getId(),
        'sku'       => $product->getSku(),
        'name'      => $product->getName(),
        'description'   => $product->getDescription(),
        'weight'      => $product->getWeight(),
        'created at'    => $product->getCreatedAt(),
        'pirce'     => Mage::helper('core')->currency($product->getPrice(), true, false), //." ".$currencyCode,
    );
}
vellai durai
fonte

Respostas:

10

Você precisará ingressar na tabela para obter o qty.

Veja o código abaixo:

$products = Mage::getModel('catalog/product')
    ->getCollection()
    //->addAttributeToSelect('*')
    ->addAttributeToSelect(array('name', 'thumbnail', 'weight' ,'price','description'))
    ->joinField(
        'qty',
        'cataloginventory/stock_item',
        'qty',
        'product_id=entity_id',
        '{{table}}.stock_id=1',
        'left'
    );

foreach ($products as $product) {
    $p['products'][] = array(
        'id'            => $product->getId(),
        'sku'           => $product->getSku(),
        'name'          => $product->getName(),
        'description'   => $product->getDescription(),
        'weight'        => $product->getWeight(),
        'created at'    => $product->getCreatedAt(),
        'pirce'         => Mage::helper('core')->currency($product->getPrice(), true, false), //." ".$currencyCode,
        //get qty
        'qty'           => $product->getQty(),
    );
}

Como obter aqui o valor do atributo criado, por exemplo, eu criei um atributo chamado size, como obter esse valor

ATUALIZAÇÃO (Embora você deva perguntar em outro qst, mas eu responderei aqui para você.)

Para obter um atributo personalizado, você precisará adicionar um atributo na ->addAttributeToSelectseção

Ainda não funciona?

Pode ser necessário carregar um modelo de produto, pois às vezes eu experimentei que nem todos os atributos personalizados são anexados quando você o extrai de uma coleção (por motivos de desempenho, eu acho). Algo como:

$_product = Mage::getModel('catalog/product')->load($product->getId());
$size = $_product->getSize();  
Adarsh ​​Khatri
fonte
como obter o valor do atributo criado aqui por exemplo eu criei um atributo de tamanho nomeado como buscar esse valor
Vellai durai
Tente $product->getSize()ou$product->getData('size')
Adarsh ​​Khatri
Seu retorno somente valores nulos
vellai durai 16/03/16
Você adicionou seu atributo personalizado ->addAttributeToSelect? Você tem que dizer o que selecionar. caso contrário, basta usar ->addAttributeToSelect(*). Isso selecionará tudo relacionado ao produto. Se isso não funcionar, verifique minha resposta atualizada em breve.
Adarsh ​​Khatri
Sim, eu adicionei
vellai durai 16/03/16
18

Está funcionando para mim.

$products = Mage::getModel('catalog/product')->getCollection();
foreach ($products as $_product) {
    $stock = Mage::getModel('cataloginventory/stock_item')->loadByProduct($_product);
    echo $stock->getQty();
    echo $stock->getMinQty();
    echo $stock->getMinSaleQty();
}
Ajay Patel
fonte
6

A adição de informações de estoque às coleções de produtos pode ser feita com uma única linha:

/* Mage_Catalog_Model_Resource_Product_Collection */
$products->setFlag('require_stock_items', true);

Este sinalizador é usado no catalog_product_collection_load_afterobservador:

/**
 * Add information about producs stock status to collection
 * Used in for product collection after load
 *
 * @param   Varien_Event_Observer $observer
 * @return  Mage_CatalogInventory_Model_Observer
 */
public function addStockStatusToCollection($observer)
{
    $productCollection = $observer->getEvent()->getCollection();
    if ($productCollection->hasFlag('require_stock_items')) {
        Mage::getModel('cataloginventory/stock')->addItemsToProducts($productCollection);
    } else {
        Mage::getModel('cataloginventory/stock_status')->addStockStatusToProducts($productCollection);
    }
    return $this;
}

Se este sinalizador não estiver definido $product->getStockItem()->getData(), apenas o is_in_stockconjunto foi definido. Com a bandeira, você pode obter qty, pedidos em atraso, ... para cada produto da coleção

foreach ($products as $product) {
    echo $product->getStockItem()->getQty();
}
sv3n
fonte
1

Você pode acessar a quantidade de estoque de produtos via StockItem como este:

$_product->getStockItem()->getQty();

Testado em template/catalog/product/view.phtml

Andreas Riedmüller
fonte