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

9

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

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

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

bpoiss
источник

Ответы:

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)
bpoiss
источник
0

Я думаю, что вы можете:

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

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

user3006940
источник