Magento产品导入

3

我希望能够以编程的方式将产品导入我的Magento中。不幸的是,我遇到了一个错误,它并没有告诉我太多信息,也许你们中的一些人有想法。这是我的php代码:

echo '<pre>';
echo 'Create Product Model';
echo '</pre>';
$product = $this->productFactory->create();
$product->setSku('my-sku2'); 
$product->setName('Sample Simple Product'); 
$product->setAttributeSetId(4); 
$product->setStatus(1); 
$product->setWeight(10); 
$product->setVisibility(4); 
$product->setTaxClassId(0);
$product->setTypeId('simple'); 
$product->setPrice(100);
$product->setStockData(
   array(
      'use_config_manage_stock' => 0,
      'manage_stock' => 1,
      'is_in_stock' => 1,
      'qty' => 999999999
        )
 );
 try {
    $this->productRepository->save($product);
    echo 'PRODUCT SAVED ';
    return 'Saved';
 } catch (CouldNotSaveException $e) {
        echo 'ERROR COULD';
        print_r($e);
 } catch (InputException $e) {
        echo 'ERROR INPUT';
        print_r($e);
 } catch (StateException $e) {
        echo 'ERROR STATE';
        print_r($e);
 } catch (LocalizedException $e) {
    echo 'ERROR LocalizedException';
    echo 'Something failed for product import ' . $product . PHP_EOL;
    print_r($e);
 }

我得到的错误是:
1 exception(s):
Exception #0 (Exception): Recoverable Error: Object of class Magento\Catalog\Model\Product\Interceptor could not be converted to string in /Applications/MAMP/htdocs/magento2/app/code/Inchoo/Helloworld/Block/Helloworld.php on line 241

Exception #0 (Exception): Recoverable Error: Object of class Magento\Catalog\Model\Product\Interceptor could not be converted to string in /Applications/MAMP/htdocs/magento2/app/code/Inchoo/Helloworld/Block/Helloworld.php on line 241
#0 /Applications/MAMP/htdocs/magento2/app/code/Inchoo/Helloworld/Block/Helloworld.php(241): Magento\Framework\App\ErrorHandler->handler(4096, 'Object of class...', '/Applications/M...', 241, Array)

我不知道我做错了什么。第一次运行代码时它是有效的。

更新

当我删除try catch部分并只调用

$this->productRepository->save($product);

我收到一个错误,显示1个异常:
Exception #0 (Magento\Framework\Exception\NoSuchEntityException): Product with SKU "my-sku2" does not exist

当然,它不存在,因为我想要创建一个新产品。那么我该如何创建一个新产品呢?

你是使用对象管理器还是创建模块?或者使用类似的问题 https://magento.stackexchange.com/questions/102922/programmatically-create-a-simple-product-in-magento-2 - Vishnu Bhadoriya
你好,我正在使用ProductFactory来创建产品模型。 - user2248905
有更新吗?我也遇到了同样的问题。 - Sarvagya
2个回答

2
您正在尝试将$product对象转换为字符串,在最后一个try-catch的echo语句中。我认为这就是您的异常消息指向的内容。尝试删除echo语句,看看LocalizedException会给出什么提示。
如果您想记录$product数据,您应该考虑使用$product->debug();,它返回一个不带所有对象递归的数据数组。该函数可用于扩展Magento\Framework\DataObject的任何对象。

https://github.com/magento/magento2/blob/2.2/lib/internal/Magento/Framework/DataObject.php#L468

更新

除上述内容外,针对您在移除try-catch后遇到的NoSuchEntityException异常;我尝试了您的代码,并在管理界面上收到以下错误信息:“请键入小于等于99999999的值。” 与数量有关,可能与此问题有关。

如果您正在从前端调用create方法并且您的Magento不是单一商店模式,则可能与商店ID有关。在这种情况下,请设置$product->setStoreId(0);以确保它保存为在管理员中保存的方式。


你好Mattias,感谢你的回答。我尝试设置storeID并更改数量,但仍然出现NoSuchEntityException错误。如果我从LocalizedException中删除echo,我也会得到NoSuchEntityException。我仍然不确定我做错了什么。 - user2248905

0

如果您正在使用productFactory创建产品模型,为什么不直接保存它呢?

$product->save();

在Magento 2中,模型上的save()函数已被废弃,因为它们不应该负责自己的持久化。应该始终使用存储库来保存模型,否则您将绕过数据准备和验证,最终有可能在数据库中得到错误的数据。 https://github.com/magento/magento2/blob/2.2/lib/internal/Magento/Framework/Model/AbstractModel.php#L645 - Mattias Nixell

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接