从产品集合中获取产品名称和价格

时间:2021-07-01 14:11:30

标签: php magento magento2

我正在尝试从产品集合中获取产品名称和价格,因为我创建了一个用于测试的自定义脚本。

$bootstrap = Bootstrap::create(BP, $_SERVER);
$objectManager = $bootstrap->getObjectManager();
$state = $objectManager->get('\Magento\Framework\App\State');
$state->setAreaCode('adminhtml');
$collection = $objectManager->create('\Magento\Catalog\Model\ResourceModel\Product\CollectionFactory')->create();
try {
    
    echo $collection->addAttributeToSelect(['name','sku'])->getSelect();
} catch (Exception $exception) {
    echo $exception->getMessage()."\n";
}

但是当我运行这个脚本来检查 MySQL 查询时,我得到以下输出:

SELECT `e`.* FROM `catalog_product_entity` AS `e`;

如何只获取产品名称和价格而不是整个数据?

3 个答案:

答案 0 :(得分:0)

当您尝试获取产品集合时,它会自动获取主产品实体表。它至少需要在查询中使用它,因为它需要实体 Id 才能与其他表连接以获取集合所需的属性。否则您将无法检索您的姓名属性。 请注意,此表非常小,除 sku 代码外不包含任何其他属性。

如果您转储返回的数据,您会发现它实际上并没有获取所有属性,但它确实需要主表。

如果您只需要这两个字段,最好使用自定义查询而不是产品集合。

答案 1 :(得分:0)

我建议你试试这个

public function getProductCollection()
{
    $collection = $this->_productCollectionFactory->create();
    $collection->addAttributeToSelect('*');
    $collection->setPageSize(3); // fetching only 3 products
    foreach ($productCollection as $product) {
        $productPrice = $product->getPrice();
        $productName = $product->getName();
    }
}

答案 2 :(得分:0)

试试这个,

<?php

namespace BRINDA\HelloWorld\Block;
class HelloWorld extends \Magento\Framework\View\Element\Template
{
    protected $productCollectionFactory;
    protected $categoryFactory;
    public function __construct(
        \Magento\Framework\View\Element\Template\Context $context,
        \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $productCollectionFactory,
        \Magento\Catalog\Model\CategoryFactory $categoryFactory,
        array $data = []
    ) {
        $this->productCollectionFactory = $productCollectionFactory;
        $this->categoryFactory = $categoryFactory;
        parent::__construct($context, $data);
    }
    public function getProductCollection()
    {
        $collection = $this->productCollectionFactory->create();
        $collection->setPageSize(3);
        foreach ($collection as $product)
        {
            echo "<pre>";
            print_r($product->getPrice());
            print_r($product->getName());
        }
        return $collection;
    }
}