Obtener la cantidad de stock del producto en magento

12

Necesito obtener la cantidad de stock del producto para el artículo, cómo obtenerlo

$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
fuente

Respuestas:

10

Tendrá que unirse a la tabla para obtener la cantidad.

Ver abajo el código:

$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(),
    );
}

Cómo obtener el valor de atributo creado aquí, por ejemplo, he creado un atributo llamado tamaño, cómo obtener ese valor

ACTUALIZACIÓN (aunque debe preguntar en otra pregunta, pero responderé aquí por usted).

Para obtener un atributo personalizado, deberá agregar el atributo en la ->addAttributeToSelectsección.

¿Aún no funciona?

Es posible que deba cargar un modelo de producto, ya que a veces he experimentado que no todos los atributos personalizados se adjuntan cuando lo saca de una colección (supongo que por razones de rendimiento). Algo como:

$_product = Mage::getModel('catalog/product')->load($product->getId());
$size = $_product->getSize();  
Adarsh ​​Khatri
fuente
cómo obtener el valor de atributo creado aquí, por ejemplo, he creado un atributo llamado tamaño cómo obtener ese valor
vellai durai
Prueba $product->getSize()o$product->getData('size')
Adarsh ​​Khatri
Solo devuelve valores nulos
vellai durai
¿Has añadido tu atributo personalizado en ->addAttributeToSelect? Tienes que decir qué seleccionar. de lo contrario, solo use ->addAttributeToSelect(*)en su lugar. Esto seleccionará todo lo relacionado con el producto. Si esto no funciona, compruebe mi respuesta actualizada en breve.
Adarsh ​​Khatri
Sí, he agregado
vellai durai
19

Me esta funcionando.

$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
fuente
6

Agregar información de inventario a las colecciones de productos se puede hacer con una sola línea:

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

Esta bandera se usa en 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;
}

Si este indicador no se establece, $product->getStockItem()->getData()solo se is_in_stockestablece. Con flag puedes obtener cantidad, pedidos pendientes, ... para cada producto de la colección

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

Puede acceder a la cantidad de stock de productos a través de StockItem de esta manera:

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

Probado en template/catalog/product/view.phtml

Andreas Riedmüller
fuente