Vérifier si un produit avec sku existe dans Magento 2


9

Dans Magento 1.x, je pouvais faire

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

Comment puis-je vérifier cela dans Magento 2?

Réponses:


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

Cela fonctionne exactement comme je le voulais.
TS Guhan

10

Essaye ça:

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

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

OU

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

et après vérification

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

2
Je pensais que vous ne devriez pas utiliser directement
objectManager

mise à jour et vérification des pls maintenant
Abdul

La 2ème version sans le gestionnaire d'objets est meilleure :)
Anna Völkl

1

Voir la réponse @bpoiss, ma réponse est plus sur la façon d'obtenir un produit en utilisant le sku.

Pour ce faire, vous pouvez utiliser la Magento\Catalog\Model\ProductRepositoryclasse.

Injectez-le d'abord dans votre constructeur:

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 */
}

Ensuite, dans votre fonction, vous pouvez faire:

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

1
Cela n'a pas fonctionné pour moi car si le sku existe, j'ai obtenu une instance de ProductInterface et sinon la chaîne 'Product n'existe pas' qui s'évalue à true. Je devrais faire une vérification d'instance supplémentaire
bpoiss

@bpoiss ouais c'est vrai ma réponse est plus sur la façon d'obtenir un produit à partir du sku, votre réponse est certainement la bonne;) Btw, vous pouvez cocher la case 'répondre à ma question' lorsque vous créez une nouvelle question afin que vous n'ayez que un formulaire à remplir;)
Raphael au Digital Pianism

merci de l'avoir signalé, mais au moment où j'ai écrit la question je ne connaissais pas la réponse ^^
bpoiss

@bpoiss haha ​​ok ^^ comme votre réponse était rapide, je suppose que vous le saviez. ;)
Raphael au Digital Pianism

0

Je viens de découvrir que la getIdBySkuméthode existe toujours en \Magento\Catalog\Model\Product. Injectez-le avec

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

et que vous pouvez vérifier avec

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

0

Je pense que vous pouvez:

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

Mais ce n'est pas la fonction standard.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.