首页>Magento>source

在Magento 1中处理大型产品系列(50,000个产品+)时,我最终使用了类似于以下内容的产品。

public function getProductCollection()
{
    $productsCollection = Mage::getModel('catalog/product')
        ->getCollection()
        ->addAttributeToSelect(array('name', 'price', 'visibility'));
    $productsCollection->setPageSize(50);
    $pages = $productsCollection->getLastPageNumber();
    $currentPage = 1;
    do {
        $productsCollection->setCurPage($currentPage);
        $productsCollection->load();
        foreach ($productsCollection as $_product) {
            echo $_product->getId() . "\n";
            echo $_product->getSku() . "\n";
            echo $_product->getName() . "\n";
            /* do stuff */

        }
        $currentPage++;
        //clear collection and free memory
        $productsCollection->clear();
    } while ($currentPage <= $pages);
}

有没有人有使用Magento2中非常大的产品系列的经验? 建议的方法是什么?

最新回答
  • 2019-12-5
    1 #

    magento论坛上有人提出过这样的建议:

    public function __construct( 
       \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $collectionFactory
    ) {
        $this->collectionFactory = $collectionFactory;
    }
    public function yourMethod()
    {
        $collection = $this->collectionFactory->create();
        $collection->addAttributeToSelect(['name','price','visibility']);
        $collection->setPageSize(50);
        $pages = $collection->getLastPageNumber();
        for ($pageNum = 1; $pageNum<=$pages; $pageNum++) {
            $collection->setCurPage($pageNum);
            foreach ($collection as $item) {
                //Do something.
            }
            $collection->clear();
        }
    }
    

  • 2019-12-5
    2 #

    我也遇到过这个问题:

    https://magento.stackexchange.com/a/213059/70343

    理论上声音虽然我没有测试过。

  • inventory:处理多个库存地点或仓库
  • magento 2.1:知道“简单” 产品通过REST API相关