2012-04-06 10 views
11

時間のために取得した後、最後の段階で、製品の作成中に、Magentoのは、エラー - 以下与える:SQLSTATE [23000]:整合性制約違反:キーのための1062年の重複エントリー「1922から1」「IDX_STOCK_PRODUCT」

SQLSTATE [23000]:整合性制約違反:キーのための1062年の重複エントリー「1922から1」「IDX_STOCK_PRODUCT」

私は何をやっていることは、製品IDを取得することで、私はそれがカスタムテーブルのエントリです入れています。私はMagentoデータベースに外部で接続しています。

驚いたことに、データはMagentoのベーステーブル&とカスタムテーブルの両方に挿入されますが、なぜ製品の保存後にエラーが出るのですか?

キャッシュ、ブラウザのCookieをクリアしました。 また、/ var/cache、/ var/sessionも削除してください。 はまだエラーが発生しています。 誰かが解決策を提案できますか?

+0

このエラーは、同じテーブルで同じプライマリキー値を2回使用していることを意味します。すでにIDX_STOCK_PRODUCTにIDが「1922-1」の製品があり、そのIDを持つ新しいレコードを再度保存しようとしています。 – mrlee

+0

解決策は何ですか? – Prat

+0

基本的に重複したIDでデータを保存しないでください。このエラーに関連するコードサンプルがなければ、それはあなたが得る最良の解決策です。 – mrlee

答えて

11

このメッセージは、UNIQUEとして定義される継ぎ目であるIDX_STOCK_PRODUCTの一部である同じ列の組み合わせを持つ別の挿入を実行していることを意味します。そうであれば、同じ組み合わせを入力することはできません(2つのフィールドで構成されているようです)。

レコードを挿入する場合は、新しいレコードIDを選択するか、レコードIDと他の列の組み合わせが一意であることを確認してください。

詳細なテーブル構造とコードがなければ、何がうまくいかないかはほとんどわかりません。

+0

あなたは正しいRadekです、私は私のカスタムテーブルでSKU&entity_idを取得しています。私のカスタムテーブルでは、私はちょうど4列 - :いいえ、entity_id、SKU&タイムスタンプ....このテーブルに入れなければならない制約はありますか? – Prat

1

idフィールドを自動インクリメントするのを忘れているかもしれません。

+0

この場合、キーは複合キーです。したがって、自動インクリメントはそれとは関係ありません。 – PanPipes

3

多くの場合、カスタムモジュールのオブザーバーで以下のように製品を更新すると、このエラーが発生します。したがって

class [NAMESPACE]_[MODULE NAME]_Model_Observer 
{ 
    /** 
    * Flag to stop observer executing more than once 
    * 
    * @var static bool 
    */ 
    static protected $_singletonFlag = false; 

    public function saveProductData(Varien_Event_Observer $observer) 
    { 
     if (!self::$_singletonFlag) { 
      self::$_singletonFlag = true; 

      $product = $observer->getEvent()->getProduct(); 
      //do stuff to the $product object 
      // $product->save(); // commenting out this line prevents the error 
      $product->getResource()->save($product); 
    } 
} 

あなたは、モジュールのオブザーバー代わりにUNIQUEのインデックスにFKを変更しようとする代わりに$product->save()

-1

$product->getResource()->save($product)を使用中にいくつかのプロパティを更新した後、あなたの製品を保存するたびに。

-4

@記号を追加したところ、それが機能し始めました。このように:@$product->save();

+1

'@'の使い方は、どうしても避けなければならない悪い習慣です! –

+1

Victorは@はエラーメッセージを抑制するので避けるべきだと述べています。詳細は、[PHPエラー制御](http://php.net/manual/en/language.operators.errorcontrol.php)を参照してください。 – PanPipes

関連する問題