2012-04-06 22 views
11

Durante la creazione del prodotto, all'ultimo passo dopo aver ottenuto per un certo tempo, Magento dà seguito degli errori:SQLSTATE [23000]: Integrità violazione del vincolo: 1062 Duplicate entry '1922-1' per la chiave 'IDX_STOCK_PRODUCT'

SQLSTATE [23000]: Integrità violazione del vincolo: 1062 Duplicate entry '1922-1' per la chiave 'IDX_STOCK_PRODUCT'

Quello che sto facendo è, catturando identificazione del prodotto, sto mettendo che è entrata nella tabella personalizzata. Sono collegato esternamente al database Magento.

Sorprendentemente i dati vengono inseriti sia nella tabella di base di Magento & anche nella tabella personalizzata, ma perché mi sta dando quell'errore dopo il salvataggio del prodotto ...?

Ho svuotato la cache, i cookie del browser. Rimuovere anche/var/cache,/var/session. ancora dando errore. Qualcuno può suggerire una soluzione?

+0

Questo errore indica che stai utilizzando lo stesso valore della chiave primaria due volte nella stessa tabella. Esiste già un prodotto con l'ID di '1922-1' in' IDX_STOCK_PRODUCT', e una query sta tentando di salvare nuovamente un nuovo record con quell'ID. – mrlee

+0

Qual è la soluzione allora? – Prat

+0

Non salvare i dati con un ID duplicato, in pratica. Senza esempi di codice rilevanti per questo errore, questa è la soluzione migliore che otterrai. – mrlee

risposta

11

il messaggio significa che si sta facendo un altro inserto con la stessa combinazione di colonne che fanno parte di IDX_STOCK_PRODUCT, le cui cuciture devono essere definite UNICHE. Se è così, non consente di inserire la stessa combinazione (sembra che sia composta da due campi) due volte.

Se si inseriscono record, accertarsi di selezionare un ID record nuovo di zecca o che la combinazione di ID record e altra colonna sia univoca.

Senza la struttura dettagliata della tabella e il codice, non possiamo immaginare che cosa sta andando storto.

+0

Hai ragione Radek, sto recuperando SKU e entity_id nella mia tabella personalizzata. Nella mia tabella personalizzata ho solo 4 colonne-: No., entity_id, SKU & timestamp .... Quale vincolo dovrei inserire in quel tavolo? – Prat

1

Potresti aver dimenticato di aumentare automaticamente il campo ID.

+0

La chiave è una chiave composta in questa istanza, quindi l'incremento automatico non ha nulla a che fare con esso. – PanPipes

3

Molte volte questo errore si verifica quando si aggiorna un prodotto nell'osservatore del modulo personalizzato come mostrato di seguito.

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

Quindi ogni volta che si salva il prodotto dopo l'aggiornamento alcuni immobili a osservatore del modulo utilizzare $product->getResource()->save($product) invece di $product->save()

-1

tenta di modificare l'FK a INDEX invece di UNICO.

-4

Ho appena aggiunto un simbolo @ e ha iniziato a funzionare. In questo modo: @$product->save();

+1

L'uso di '@' è una cattiva pratica che deve essere evitata a tutti i costi! –

+1

Come dice Victor @ dovrebbe essere evitato in quanto sopprime i messaggi di errore. Dettagli possono essere trovati su [PHP Error Control here] (http://php.net/manual/en/language.operators.errorcontrol.php) – PanPipes

Problemi correlati