2

![1062重複エントリ] [2] Magentoの製品作成コードで、/ htdocs / magento / app / code / core / Mage / Adminhtml / controllers / Catalog/ProductController.phpに独自のカスタムコードを追加します。外部mysql接続を作成しました。 &カスタムテーブルに製品IDとSKUを挿入するために使用します(これは推奨される方法ではありませんが、テスト目的でのみ実行しています)。

私のコード-:

public function saveAction()
{
        $storeId        = $this->getRequest()->getParam('store');
        $redirectBack   = $this->getRequest()->getParam('back', false);
        $productId      = $this->getRequest()->getParam('id');
        $isEdit         = (int)($this->getRequest()->getParam('id') != null);

        $data = $this->getRequest()->getPost();
        if ($data) {
            if (!isset($data['product']['stock_data']['use_config_manage_stock'])) {
                $data['product']['stock_data']['use_config_manage_stock'] = 0;
            }
            $product = $this->_initProductSave();

            try {
                $product->save();
                $productId = $product->getId();
//-------My code start---------------------------------
     $db_name = "magento";
             $con = mysql_connect  ("www.xyz.com", "magento", "password");
            If(!$con)
    {
        die('Could not connect: ' . mysql_error());
        mysql_close($con);
    }
    $seldb = mysql_select_db($db_name, $con);

    $query_fetch = "SELECT cpe.entity_id, cpe.sku FROM catalog_product_entity cpe
               WHERE cpe.entity_id = ".$productId;

    $result_query_fetch = mysql_query($query_fetch);
    while($row = mysql_fetch_array($result_query_fetch))
    {
        $entity_id = ($row["entity_id"]);
        $sku = ($row["sku"]);           
        $result_fetch = "$entity_id".",'".$sku."'";
    }

         $query_insert = "INSERT into product_creation(entity_id,sku,creation_date) VALUES(".$result_fetch.", NOW())";
    $result_insert = mysql_query($query_insert);

    mysql_close($con);
  //--------------------------My code End-----------------------------------------

                /**
                 * Do copying data to stores
                 */
                if (isset($data['copy_to_stores'])) {
                    foreach ($data['copy_to_stores'] as $storeTo=>$storeFrom) {
                        $newProduct = Mage::getModel('catalog/product')
                            ->setStoreId($storeFrom)
                            ->load($productId)
                            ->setStoreId($storeTo)
                            ->save();
                    }
                }


                Mage::getModel('catalogrule/rule')->applyAllRulesToProduct($productId);

                $this->_getSession()->addSuccess($this->__('The product has been saved.'));


            }
            catch (Mage_Core_Exception $e) {
                $this->_getSession()->addError($e->getMessage())
                    ->setProductData($data);
                $redirectBack = true;
            }
            catch (Exception $e) {
                Mage::logException($e);
                $this->_getSession()->addError($e->getMessage());
                $redirectBack = true;
            }
        }

        if ($redirectBack) {
            $this->_redirect('*/*/edit', array(
                'id'    => $productId,
                '_current'=>true
            ));
        }
        else if($this->getRequest()->getParam('popup')) {
            $this->_redirect('*/*/created', array(
                '_current'   => true,
                'id'         => $productId,
                'edit'       => $isEdit
            ));
        }
        else {
            $this->_redirect('*/*/', array('store'=>$storeId));
        }
    }

したがって、このコードから、製品データは両方のテーブルに挿入されますが、次のようなエラーが発生します

SQLSTATE [23000]:整合性制約違反:1062キー'IDX_STOCK_PRODUCT'のエントリ'1949-1'が重複しています

誰かplzは私がこの問題を解決するのを手伝ってくれますか...

私が試した解決策-:

-/ var / cache&/ var/sessionを削除します

-ブラウザのキャッシュとCookieをクリアする

-app / etc / config.xmlで、これを変更します

名前utf8をこれに設定します

名前を設定するutf8; SET FOREIGN_KEY_CHECKS = 0; SET UNIQUE_CHECKS = 0;

それでも同じエラーが発生します...またはplzは、コードで何を変更する必要があるかを教えてくれますか?

PS-コアファイルのコードを変更し、ZEND接続ではなく外部接続を使用しているため、これは推奨されない方法であることを知っています...しかし、これはテスト目的のためだけです...

この問題の解決策はありますか?

plzは私を助けます...

4

1 に答える 1

1

問題が何であるかについてのエラーは非常に明確です。一意のキー制約IDX_STOCK_PRODUCTがあり、そのキーがカバーする列に値「1949-1」のレコードがすでに存在します。

于 2012-04-14T12:29:14.933 に答える