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

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();  

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

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

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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.