我想以编程方式将产品导入我的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
当然它不存在,因为我想创建一个新产品。那么我该如何创建新产品呢?
答案 0 :(得分:1)
您正在尝试将$ product对象转换为上一次try-catch的回显中的字符串。我相信这是你的Exception消息所指向的。尝试删除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
;我尝试了您的代码并在管理员中收到了以下错误&#34;请输入小于或等于99999999的值。&#34;数量,可能与问题有关。
如果你从前端调用create并且你的Magento不是单存储模式,那么商店ID也可能是模糊的。在这种情况下,请设置$product->setStoreId(0);
以确保其在管理中保存。
答案 1 :(得分:0)
如果您使用productFactory创建产品型号,为什么不只是保存它?
$product->save();