我正在尝试从产品集合中获取产品名称和价格,因为我创建了一个用于测试的自定义脚本。
$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`;
如何只获取产品名称和价格而不是整个数据?
答案 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;
}
}