Verifique se o produto com sku existe no Magento 2

9

No Magento 1.x eu poderia fazer

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

Como posso verificar isso no Magento 2?

bpoiss
fonte

Respostas:

11
tente { 
    $ product = $ productRepository -> get ( $ sku ); } catch ( \ Magento \ Framework \ Exception \ NoSuchEntityException $ e ) { 
    $ product = false ; } 
   
Amol Kumbhar
fonte
Isso funciona exatamente como eu queria.
TS Guhan 07/06/19
10

Tente o seguinte:

$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;
    }

e depois da verificação

if($this->_product->getIdBySku($sku)) {
    echo 'exit';    
}
Abdul
fonte
2
Achei que você não deve usar o ObjectManager diretamente
bpoiss
atualizado ans pls check now
Abdul
2ª versão sem o gerenciador de objetos é melhor :)
Anna Volkl
1

Consulte a resposta @bpoiss, minha resposta é mais sobre como obter um produto usando o sku.

Para fazer isso, você pode usar a Magento\Catalog\Model\ProductRepositoryclasse

Primeiro injete-o no seu construtor:

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

Então, na sua função, você pode fazer:

$this->_productRepository->get($sku);
Raphael na Digital Pianism
fonte
11
Isso não funcionou para mim porque, se o sku existe, recebi uma instância do ProductInterface e, caso contrário, a string 'Product is not exist' é avaliada como true. Eu teria que fazer uma verificação instância adicional
bpoiss
@bpoiss Sim, está certo. Minha resposta é mais sobre como obter um produto do sku, sua resposta é definitivamente a certa; um formulário para preencher;)
Raphael no Pianism Digital
obrigado por apontar isto, mas no momento em que escrevi a pergunta que eu não sabia a resposta ^^
bpoiss
@bpoiss haha ​​ok ^^ como sua resposta foi rápida, eu acho que você sabia disso. ;)
Rafael no Digital Pianism em 18/03/16
0

Acabei de descobrir que o getIdBySkumétodo ainda existe no \Magento\Catalog\Model\Product. Injete com

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

e do que você pode verificar com

$this->productModel->getIdBySku($sku)
bpoiss
fonte
0

Eu acho que você pode:

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

Mas não é a função padrão.

user3006940
fonte