检查Magento 2中是否存在带有SKU的产品


9

在Magento 1.x中,我可以做

if(Mage::getModel('catalog/product')->getIdBySku($sku))

如何在Magento 2中进行检查?

Answers:


11
尝试{ 
    $ product = $ productRepository- > get $ sku ); } catch \ Magento \ Framework \ Exception \ NoSuchEntityException $ e ){ 
    $ product = false ; } 
   

这完全符合我的要求。
TS Guhan

10

尝试这个:

$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$product = $objectManager->get('Magento\Catalog\Model\Product');

if($product->getIdBySku($sku)) {
    echo 'exit';    
}

要么

protected $product;
    public function __construct(
            \Magento\Catalog\Model\Product $product
    ) {
        $this->_product = $product;
    }

然后检查

if($this->_product->getIdBySku($sku)) {
    echo 'exit';    
}

2
我认为您不应该直接使用objectManager
bpoiss

立即更新ans pls支票
阿卜杜勒

没有对象管理器的第二个版本更好:)
AnnaVölkl17年

1

参见@bpoiss答案,我的答案更多是关于如何使用sku获得产品。

为此,您可以使用Magento\Catalog\Model\ProductRepository该类。

首先将其注入您的构造函数中:

protected $_productRepository;

public function __construct(/* your original parameters here */, \Magento\Catalog\Model\ProductRepository $productRepository)
{
    /* your original code here */
    $this->_productRepository = $productRepository;
    /* end of your original code */
}

然后,您可以在函数中执行以下操作:

$this->_productRepository->get($sku);

1
这对我不起作用,因为如果sku存在,我将获得ProductInterface的实例,否则,字符串'Product不存在'的值将评估为true。我将不得不进行一次额外的实例检查
bpoiss

@bpoiss是的,我的答案更多是关于如何从sku获取产品,您的答案绝对是正确的;)顺便说一句,您可以在创建新问题时勾选“回答我的问题”,这样您就可以一张表格要填写;)
拉斐尔(Raphael)在Digital Pianism上16-3-18

感谢您指出这一点,但此刻我写下了一个我不知道答案的问题^^
bpoiss

@bpoiss哈哈ok ^^,因为您的回答很快,我猜您知道。;)
拉斐尔(Raphael)在Digital Pianism上16-3-18

0

刚刚发现该getIdBySku方法仍然存在\Magento\Catalog\Model\Product。注入

public function __construct(
    \Magento\Catalog\Model\Product $productModel
) {
    $this->productModel = $productModel;
}

然后您可以检查

$this->productModel->getIdBySku($sku)

0

我认为您可以:

$checkProduct = $this->objectManager->create(
                'Magento\Catalog\Model\Product'
            );
    if($checkProduct->getIdBySku()){
    echo 'exist';
    }

但这不是标准功能。

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.