Compruebe si el producto con sku existe en Magento 2

9

En Magento 1.x podría hacer

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

¿Cómo puedo verificar esto en Magento 2?

bpoiss
fuente

Respuestas:

11
pruebe { 
    $ product = $ productRepository -> get ( $ sku ); } catch ( \ Magento \ Framework \ Exception \ NoSuchEntityException $ e ) { 
    $ product = false ; } 
   
Amol Kumbhar
fuente
Esto funciona exactamente como quería.
TS Guhan
10

Prueba esto:

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

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

O

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

y después del cheque

if($this->_product->getIdBySku($sku)) {
    echo 'exit';    
}
Abdul
fuente
2
Pensé que no deberías usar el ObjectManager directamente
bpoiss
actualizado y por favor verifique ahora
Abdul
La segunda versión sin el administrador de objetos es mejor :)
Anna Völkl
1

Vea la respuesta @bpoiss, mi respuesta es más sobre cómo obtener un producto usando el sku.

Para hacerlo, puedes usar la Magento\Catalog\Model\ProductRepositoryclase.

Primero inyecte en su constructor:

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

Entonces en su función puede hacer:

$this->_productRepository->get($sku);
Raphael en Digital Pianism
fuente
1
Esto no funcionó para mí porque si el sku existe, obtengo una instancia de ProductInterface y, de lo contrario, la cadena 'Producto no existe' que se evalúa como verdadera. Tendría que hacer una comprobación de instancia adicional
bpoiss
@bpoiss, sí, así es, mi respuesta es más sobre cómo obtener un producto del sku, su respuesta es definitivamente la correcta;) Por cierto, puede marcar 'responder mi pregunta' cuando cree una nueva pregunta para que solo tenga un formulario para llenar;)
Raphael en Digital Pianism
gracias por señalar esto, pero en el momento en que escribí la pregunta no sabía la respuesta ^^
bpoiss
@bpoiss jaja ok ^^ como tu respuesta fue rápida, supuse que lo sabías. ;)
Raphael en Digital Pianism
0

Acabo de descubrir que el getIdBySkumétodo todavía existe en \Magento\Catalog\Model\Product. Inyectarlo con

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

y que puedes consultar con

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

Yo creo que puedes:

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

Pero no es la función estándar.

usuario3006940
fuente