3

Magento フロントエンドから製品を作成しようとしていますが、php コードを実行すると、次のエラーが表示されます。

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 に問題があるはずですが、eav_attribute_set テーブルから ID を強制しようとしました。

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();

ありがとう!

4

3 に答える 3

3

有効な ID が正常に返された$attributeSetId場合は、有効な が設定されているかどうかを確認してください。Mage::getModel('catalog/config')->getAttributeSetId('catalog_product','Set_evento')

同じエラーが発生し、有効な属性セット ID を設定すると問題が解決しました。

于 2014-02-28T10:50:43.993 に答える
1

インポーターの実行中に同じ問題が発生しました。このコードを追加すると、更新しようとしていた製品の一部が存在しないことが問題であることがわかりました。

$productid = Mage::getModel('catalog/product')
            ->getIdBySku(trim($sku));
        if(!$productid){
            Mage::Log('Failed to load product with Sku:'.$sku,null,'cron.log');
            return;
        }
于 2014-07-22T00:36:48.463 に答える
1

基本的に、外部キー制約エラーは、参照先のテーブルに存在しない値をその列に入力しようとすると発生します。この場合、プライマリ テーブルに挿入しようとしている値がセカンダリ テーブルで許可されているかどうかを確認します。

于 2012-10-28T21:52:12.357 に答える