2012-04-06 10 views
11

Während Produkt zu schaffen, bei dem nach dem letzten Schritt während einer Zeit Abrufen gibt Magento fehler- folgenden:SQLSTATE [23000]: Integrität Einschränkungsverletzung: 1062 doppelte Eintrag '1922-1' für key 'IDX_STOCK_PRODUCT'

SQLSTATE [23000]: Integrität Einschränkungsverletzung: 1062 doppelte Eintrag ‚1922-1‘ für Schlüssel ‚IDX_STOCK_PRODUCT‘

Was ich tue, ist, durch Produkt-ID erfassen, ich stelle es Eintrag in benutzerdefinierter Tabelle. Ich habe extern mit der Magento-Datenbank verbunden.

Überraschenderweise Daten in beiden Magento-Basistabelle & auch in benutzerdefinierten Tabelle eingefügt, aber warum gibt es mir diesen Fehler nach der Produkteinsparung ...?

Ich löschte Cache, Browser-Cookies. Entfernen Sie auch/var/cache,/var/session. gibt immer noch Fehler. Kann jemand eine Lösung vorschlagen?

+0

Dieser Fehler bedeutet, dass Sie denselben Primärschlüsselwert zweimal in derselben Tabelle verwenden. Es gibt bereits ein Produkt mit der ID '1922-1' in 'IDX_STOCK_PRODUCT', und eine Abfrage versucht erneut, einen neuen Datensatz mit dieser ID zu speichern. – mrlee

+0

Was ist die Lösung dann? – Prat

+0

Speichern Sie grundsätzlich keine Daten mit einer doppelten ID. Ohne die für diesen Fehler relevanten Codebeispiele ist dies die beste Lösung, die Sie erhalten. – mrlee

Antwort

11

Die Nachricht bedeutet, dass Sie eine weitere Einfügung mit der gleichen Kombination von Spalten ausführen, die Teil von IDX_STOCK_PRODUCT sind, die als UNIQUE definiert ist. Wenn es so ist, erlaubt es nicht, dieselbe Kombination zweimal einzugeben (es scheint, als ob sie aus zwei Feldern besteht).

Wenn Sie Datensätze einfügen, stellen Sie sicher, dass Sie eine neue Datensatz-ID auswählen oder dass die Kombination aus Datensatz-ID und der anderen Spalte eindeutig ist.

Ohne detaillierte Tabellenstruktur und Ihren Code können wir kaum erraten, was schief läuft.

+0

Sie haben Recht Radek, ich hole SKU & entity_id in meiner benutzerdefinierten Tabelle. In meiner benutzerdefinierten Tabelle habe ich nur 4 Spalten: Nein, Entitäts-ID, SKU und Timestamp .... Welche Einschränkung sollte ich in diese Tabelle einfügen? – Prat

1

Sie haben möglicherweise vergessen, das ID-Feld automatisch zu erhöhen.

+0

Der Schlüssel ist in diesem Fall ein zusammengesetzter Schlüssel, also hat das automatische Inkrementieren nichts damit zu tun. – PanPipes

3

Viele Male wird dieser Fehler verursacht, wenn Sie ein Produkt im Beobachter Ihres benutzerdefinierten Moduls wie unten gezeigt aktualisieren.

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

Daher, wenn Sie Ihr Produkt speichern, nachdem einige Eigenschaften in Ihrem Modul des Betrachters verwenden $product->getResource()->save($product) statt $product->save()

-1

Versuchen Aktualisierung der FK INDEX statt UNIQUE zu ändern.

-4

Ich habe gerade ein @ -Symbol hinzugefügt und es hat angefangen zu arbeiten. Wie folgt: @$product->save();

+1

Die Verwendung von '@' ist eine schlechte Praxis, die um jeden Preis vermieden werden muss! –

+1

Wie Victor sagt @ sollte vermieden werden, da es Fehlermeldungen unterdrückt. Details finden Sie hier [PHP Error Control] (http://php.net/manual/en/language.operators.errorcontrol.php) – PanPipes

Verwandte Themen