2012-10-28 107 views
3

我试图创建一个从Magento的前端产品,而是创造产品时执行的PHP代码我收到此错误:完整性约束违规在Magento

SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`magento`.`catalog_product_entity`, CONSTRAINT `FK_CAT_PRD_ENTT_ATTR_SET_ID_EAV_ATTR_SET_ATTR_SET_ID` FOREIGN KEY (`attribute_set_id`) REFERENCES `eav_attribute_set` (`attribute_set_id`) ON DE) 

我发现这里:Create a product from PHP - Magento这应该是一个问题与属性集的ID,但我试图力的ID从表eav_attribute_set,然后用功能:

Mage::getModel('catalog/config')->getAttributeSetId('catalog_product','Set_evento') 

而与此功能以上但与“默认”值。没变化。所以也许问题不是属性集ID?

这是我的代码:

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

$product->setSku(time()); 
$product->setName("Evento senza nome"); 
$product->setDescription("123"); 
$product->setShortDescription("1234"); 
$product->setPrice(0.00); 
$product->setTypeId('virtual'); 
$attributeSetId = Mage::getModel('catalog/config')->getAttributeSetId('catalog_product','Set_evento'); 
$product->setAttributeSetId($attributeSetId); 
$product->setCategoryIds(array($cat_id)); 
$product->setVisibility(4); // catalog, search 
$product->setStatus(1); // enabled 

// assign product to the default website 
$product->setWebsiteIds(array(Mage::app()->getStore(true)->getWebsite()->getId())); 

// for stock 
$stockData = $product->getStockData(); 
$stockData['qty'] = 1; 
$stockData['is_in_stock'] = 1; 
$product->setStockData($stockData); 

$product->setCreatedAt(strtotime('now')); 

Mage::app()->getStore()->setId(Mage_Core_Model_App::ADMIN_STORE_ID); 

$product->save(); 

谢谢!

回答

1

基本上外键约束错误是你想输入一个值该列并不在引用表中存在造成的。在这种情况下 - 我会检查你想要插入到主表中的值是否允许在你的次表中。

+0

我试过,但我不觉得有什么问题...... – user1781462

+1

OK,让你想进入'catalog_product_entity'列中的值 - 它在'eav_attribute_set'表中存在? – Swomble

2

请检查您是否已经设置了有效的$attributeSetId,如果Mage::getModel('catalog/config')->getAttributeSetId('catalog_product','Set_evento')成功返回一个有效的身份证件。

我有相同的错误,并设置有效的属性设置ID解决了我的问题。

+1

确实是这个问题 –

1

我有同样的问题,同时运行进口商,我发现这个问题是部分产品我试图更新不存在添加该代码为我工作的。

$productid = Mage::getModel('catalog/product') 
      ->getIdBySku(trim($sku)); 
     if(!$productid){ 
      Mage::Log('Failed to load product with Sku:'.$sku,null,'cron.log'); 
      return; 
     } 
相关问题