Magento 2-如何检索产品信息


18

我想用类似的功能getName()getPrice()等产品在Magento 2检索产品信息。

谁能告诉我我该如何实现?


@JJohn,它在下面的答案下工作吗?如果选择是,则对其他用户有用。如果没有,请告诉我,以便我们提供解决方案。
Bojjaiah 2015年

Answers:


22

在Magento 2中,建议为此使用服务层。尝试使用\Magento\Catalog\Model\ProductRepository::getById方法通过ID获取产品


1
您应该改用\ Magento \ Catalog \ Api \ ProductRepositoryInterface :: getById。
Thiago Lima

不建议在Magneto 2中使用ProductRepository
Waqar Ali

12

Magento 2建议Factories用于加载所有模型。这是您应该如何做:

  1. 在课程上方,添加以下行:

    use Magento\Catalog\Model\ProductFactory;
  2. 现在创建类属性:

    protected $productFactory;
  3. 在构造函数中,添加依赖项:

    public function __construct(
       ProductFactory $productFactory
    ) {
       $this->productFactory = $productFactory;
    }
    
  4. 现在按以下方式加载产品:

    $_product = $this->productFactory->create()->load(<product_id>);

Magento 2.1.7中没有类\ Magento \ Catalog \ Model \ ProductFactory
shahir hajir

2
大多数工厂类在模块中不存在。它们在var / generation中生成,以使用对象管理器实例化类。无论如何,您都不应该使用工厂来加载产品。按照其他人的建议使用\ Magento \ Catalog \ Api \ ProductRepositoryInterface。或者至少使用Magento \ Catalog \ Model \ ProductRepository :: getById($ id)
Frank

使用ProductRepository不会创建新对象,例如使用工厂不会创建新对象
Raul Sanchez


6

尽管很难说,因为它们在核心代码中的大多数位置都以不同的方式使用产品存储库,所以很难做到这一点。

use Magento\Catalog\Model\ProductRepository;

protected $productRepository;

public function __construct(
   ProductRepository $productRepository
) {
   $this->productRepository = $productRepository;
}

public function getMyProduct($productId)
{
    return $this->productRepository->getById($productId);
}

正确,最佳和正确答案
Matthias Kleine's

Magento 2中使用productRepository存在市场问题
Waqar Ali

0

为此,您必须在下面使用

采用 \Magento\Catalog\Model\Resource\Product\CollectionFactory

$prod_id = "Your product id goes here";
$om         =   \Magento\Framework\App\ObjectManager::getInstance();
$pdata =   $om->create('Magento\Catalog\Model\Product')->load($prod_id);

-1

我已使用功能在产品视图页面中获取产品详细信息,如下所示。

Sm / Sawyer是我的主题。

$_config = $this->helper('Sm\Sawyer\Helper\Data');
$productId = $this->getProduct()->getId();
$name = $this->getProduct()->getName();
$stock1 = $this->getProduct()->getQty();
$price = $this->getProduct()->getPrice();

非常不好的答案
LucScu

没有帮助-只是混乱
马蒂亚斯·克莱恩
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.