Проверьте, существует ли продукт с sku в Magento 2


9

В Magento 1.x я мог сделать

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

Как я могу проверить это в Magento 2?

Ответы:


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

Это работает именно так, как я хотел.
TS

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

обновлены и пожалуйста, проверьте сейчас
Абдул

2-я версия без менеджера объектов лучше :)
Анна

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 not Существует», которая оценивается как true. Я должен был бы сделать дополнительную проверку экземпляра
bpoiss

@ bpoiss, да, это верно, мой ответ больше о том, как получить продукт из sku, ваш ответ, безусловно, правильный;) Кстати, вы можете поставить галочку «ответить на мой вопрос», когда вы создаете новый вопрос, так что у вас будет только одну форму для заполнения;)
Рафаэль в Digital Pianism

спасибо за указание на это, но в тот момент, когда я написал вопрос, я не знал ответа ^^
bpoiss

@bpoiss хаха ок ^^ твой ответ был быстрым, я догадался, ты это знал. ;)
Рафаэль в Digital Pianism

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

Но это не стандартная функция.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.