フロントエンド製品の作成でエラーが発生しましたか?


7

フロントエンドで商品を追加しています。

エラーメッセージが表示されます。

ここに画像の説明を入力してください

SQLSTATE [23000]:整合性制約違反:1452子行を追加または更新できません:外部キー制約が失敗しました(magentocatalog_product_entity、CONSTRAINT FK_CAT_PRD_ENTT_ATTR_SET_ID_EAV_ATTR_SET_ATTR_SET_IDFOREIGN KEY(attribute_set_id)REFERENCES eav_attribute_setattribute_set_id)ON DE)

public function saveVirtualNewProduct($wholedata)
{           
        $cats=array();
        foreach($wholedata['category'] as $keycat){
            array_push($cats,$keycat);
        }
        if($wholedata['status']==1 && isset($wholedata['wstoreids']) ){
            $status=1; 
            $stores=$wholedata['wstoreids'];
        }
        else{
            $status=Mage::getStoreConfig('marketplace/marketplace_options/product_approval')? 2:1;
            $stores=Mage::app()->getStore()->getStoreId();
        }
        $magentoProductModel = Mage::getModel('catalog/product');
        $magentoProductModel->setData($wholedata);
        $saved=$magentoProductModel->save();
        $lastInserId = $saved->getId();
/* Update  Special from-to Date */
    if($wholedata['special_from_date'] && $wholedata['special_to_date']) 
    {
        //Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);
        $product = Mage::getModel('catalog/product')->load($lastInserId);
        $product->setSpecialFromDate($wholedata['special_from_date']);
        $product->setSpecialFromDateIsFormated(true);
        $product->setSpecialToDate($wholedata['special_to_date']);
        $product->setSpecialToDateIsFormated(true);
        $product->save();
    }
/* Update  Special from-to Date */

        $magentoProductModel = Mage::getModel('catalog/product')->load($saved->getId());
        $baseCurrencyCode = Mage::app()->getStore()->getBaseCurrencyCode();
        $currentCurrencyCode = Mage::app()->getStore()->getCurrentCurrencyCode();
        $allowedCurrencies = Mage::getModel('directory/currency')->getConfigAllowCurrencies(); 
        $rates = Mage::getModel('directory/currency')->getCurrencyRates($baseCurrencyCode, array_values($allowedCurrencies));

        if($wholedata['special_price']){
            $special_price = $wholedata['special_price']/$rates[$currentCurrencyCode];
            $magentoProductModel->setSpecialPrice($special_price);
        }

        $price = $wholedata['price']/$rates[$currentCurrencyCode];
        $magentoProductModel->setPrice($price);
        $magentoProductModel->setStoresIds(array($stores));
        $storeId = Mage::app()->getStore()->getId();
        $magentoProductModel->setWebsiteIds(array(Mage::getModel('core/store')->load( $storeId )->getWebsiteId()));
        $magentoProductModel->setCategoryIds($cats);
        $magentoProductModel->setStatus($status);
        $saved=$magentoProductModel->save();
        $lastId = $saved->getId();
        $this->_saveStock($lastId,$wholedata['stock'],$wholedata['is_in_stock']);

        $wholedata['id'] = $lastId;

        $collection1=Mage::getModel('marketplace/product');
        $collection1->setmageproductid($lastId);
        $collection1->setuserid($wholedata['userid']);
        $collection1->setstatus($status);
        $collection1->save();

        if($wholedata['type_id']=='virtual'){
        if((isset($_FILES) && count($_FILES) > 0) && !isset($wholedata['csv'])){
                if (!is_dir(Mage::getBaseDir().'/media/marketplace/')){
                mkdir(Mage::getBaseDir().'/media/marketplace/', 0755);
                }
                    if (!is_dir(Mage::getBaseDir().'/media/marketplace/'.$lastId)){
                    mkdir(Mage::getBaseDir().'/media/marketplace/'.$lastId, 0755);
                    }
                foreach($_FILES as $image){
                    $imagesdir = Mage::getBaseDir().'/media/marketplace/'.$lastId.'/';
                    $filename = $image['name'];                 
                    move_uploaded_file($image['tmp_name'],$imagesdir.$filename);    
                    }
                $this->_addImages($lastId,$wholedata['defaultimage']);
            }
        }
        return $lastId;     
    }

誰か助けてください

ありがとう。


実行中のセットアップスクリプトはありますか?エラーメッセージだけでは、原因を特定するのは困難です。
David Manners

MarketplaceaccountController.phpの18行目のコードは何ですか?
MTM 2014

また、少しの提案ですが、更新するために同じ製品を何度もロードする必要はないと思います。$magentoProductModel関数の開始時に初期化されたモデルを使用して更新および保存できます。これにより、オーバーヘッドが削減されます。
MTM 2014

1
この優れたデバッグチュートリアルを確認し、報告してください。
Fabian Blechschmidt 2014

回答:


1

attribute_set_id属性セット値に存在しない、その列の値がない、または値のある製品を作成しようとしています。

余談ですがsave、1つの製品を保存するために使用する呼び出しが多すぎます。
属性を使用して1つの大きな配列を作成し、それを製品モデルに割り当てて、一度だけ保存します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.