2011-07-18 71 views
10

我正尝试以编程方式将产品添加到Magento 1.5。我的脚本最终将成为一个cron工作,定期更新和添加由帐户系统提供的XML文件指定的产品。Magento:以编程方式添加新产品

我在创建新产品时遇到问题。从我的脚本中的相关代码段为:

$attributeSetId = 4; 

    //$newproduct = Mage::getModel('catalog/product'); 
    $newproduct = new Mage_Catalog_Model_Product(); 

    $newproduct->setTypeId('simple'); 
    $newproduct->setWeight($product->UnitWeight);  
    $newproduct->setVisibility(Mage_Catalog_Model_Product_Visibility::VISIBILITY_BOTH); 
    $newproduct->setStatus(1); 
    $newproduct->setSKU($SKU); 
    $newproduct->setTaxClassId(0); 
    $newproduct->setWebsiteIDs(array(0)); 
    $newproduct->setStoreIDs(array(1)); 
    $newproduct->setStockData(array( 
     'is_in_stock' => 1, 
     'qty' => $XMLproduct->QtyInStock, 
     'manage_stock' => 1 
    )); 

    $newproduct->setAttributeSetId(4); 
    $newproduct->setName($product->Name); 
    $newproduct->setCategoryIds(array(3)); // array of categories it will relate to 

    $newproduct->setDescription($product->LongDescription); 
    $newproduct->setShortDescription($product->Description); 
    $newproduct->setPrice($XMLproduct->SalePrice); 

    try { 
     if (is_array($errors = $newproduct->validate())) { 
      $strErrors = array(); 
      foreach($errors as $code=>$error) { 
       $strErrors[] = ($error === true)? Mage::helper('catalog')->__('Attribute "%s" is invalid.', $code) : $error; 
      } 
      $this->_fault('data_invalid', implode("\n", $strErrors)); 
     } 

     $newproduct->save(); 
    } catch (Mage_Core_Exception $e) { 
     $this->_fault('data_invalid', $e->getMessage()); 
    } 

该产品是“半壁江山”创建,但脚本放弃抛出以下错误:

PHP Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`LittleDickyBird`.`catalog_category_product_index`, CONSTRAINT `FK_CATALOG_CATEGORY_PROD_IDX_CATEGORY_ENTITY` FOREIGN KEY (`category_id`) REFERENCES `catalog_category_entity` (`entity_id`) ON)' in /home/default/littledickybird.co.uk/user/htdocs/1.5/lib/Zend/Db/Statement/Pdo.php:228 
Stack trace: 
#0 /home/default/littledickybird.co.uk/user/htdocs/1.5/lib/Zend/Db/Statement/Pdo.php(228): PDOStatement->execute(Array) 
#1 /home/default/littledickybird.co.uk/user/htdocs/1.5/lib/Zend/Db/Statement.php(300): Zend_Db_Statement_Pdo->_execute(Array) 
#2 /home/default/littledickybird.co.uk/user/htdocs/1.5/lib/Zend/Db/Adapter/Abstract.php(479): Zend_Db_Statement->execute(Array) 
#3 /home/default/littledickybird.co.uk/user/htdocs/1.5/lib/Zend/Db/Adapter/Pdo/Abstract.php(238): Zend_Db_Adapter_Abstract->query('INSERT INTO `ca...', Array) 
#4 /home/default/littledic in /home/default/littledickybird.co.uk/user/htdocs/1.5/lib/Zend/Db/Statement/Pdo.php on line 234 

任何人都可以,请抛出任何光照射到我错过了什么或者做错了什么。正如你从我的口气中可以看出的那样,我非常绝望,所以任何帮助都会非常感激。

谢谢

+0

当初,是由MySQL的打开InnoDB的解决类似的问题。可能想在那里检查。希望有所帮助! – Nic

+0

不幸的是,这似乎不是问题,因为InnoDB已经处于活动状态。但是谢谢你的帮助。 – AMP

+1

错误提示您尝试使用不存在的类别标识。你确定有一个类别3? – clockworkgeek

回答

21

AMP的OP,已经自我回答了这个问题。

报价:

Cool, I have found the problem, the line: $newproduct->setWebsiteIDs(array(0)); should be: $newproduct->setWebsiteIDs(array(1)); Amazing how the smallest thing can waste hours!

注:这绝对是OK to self-answer你自己的问题。请将它作为真实答案发布,但不是在问题或评论中。作为真正的答案发帖有助于保持“未答复”清单更加清晰(避免让其他人浪费时间)。

1

@Jurgen和@Amp都是完美的答案。

我认为这可能是这样的方式来完成,使其成为更具活力的

$newproduct->setWebsiteIds(array(Mage::app()->getStore(true)->getWebsite()->getId())); 
相关问题