Magento 2 - 如何获取所有库存产品的数量

Magento 2 - How do get the quantity of all products in stock

我想要所有类别的所有可用产品的总数量。我知道有 ->getStockItem()->getQty(),但这仅适用于每种产品,并非适用于所有产品。

现在我循环分类并计算产品数量,但非活动产品也被计算在内:

        $sum = 0;
        for($i=3; $i <= 18; $i++) {
            $categoryI = $categoryFactory->create()->load($i);
            echo $categoryI->getProductCount();
            $sum+= $categoryI->getProductCount();
            echo ' ';
        }
        echo 'Summe: ';
        echo $sum;

是否有一种简单明了的方法来获取库存中所有活跃产品的总和?谢谢

没有按类别执行此操作的“内置”方法。如果你想计算启用的产品,但只针对某些类别,你可以使用这样的东西:

在你的结构中:

protected $_productCollectionFactory;

public function __construct(
    // ...
    \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $productCollectionFactory,
    // ...
) {
    // ...
    $this->_productCollectionFactory = $productCollectionFactory;
    // ...
}

在你的函数中:

$sum = 0;
for($i=3; $i <= 18; $i++) {
    $product_collection = $this->_productCollectionFactory->create();
    $product_collection ->addCategoryFilter($category);
    $product_collection ->addAttributeToFilter('status',\Magento\Catalog\Model\Product\Attribute\Source\Status::STATUS_ENABLED);
    $sum += $product_collection->count();
}

这样您就可以获得可用的产品属性数据,因此您可以处理每个产品的个性。对于您的用例,您可以完全省略类别,因为您希望整个产品计数使用

$sum = 0;
$product_collection = $this->_productCollectionFactory->create();
$product_collection ->addAttributeToFilter('status',\Magento\Catalog\Model\Product\Attribute\Source\Status::STATUS_ENABLED);
$sum = $product_collection->count();