web-dev-qa-db-fra.com

SQLSTATE [23000]: Violation de contrainte d'intégrité: 1062 Entrée en double '1922-1' pour la clé 'IDX_STOCK_PRODUCT'

Lors de la création du produit, à la dernière étape après avoir récupéré pendant un certain temps, Magento affiche l’erreur suivante:

SQLSTATE [23000]: Violation de contrainte d'intégrité: 1062 Entrée en double '1922-1' pour la clé 'IDX_STOCK_PRODUCT'

Ce que je fais est, en capturant l'id du produit, je mets son entrée dans un tableau personnalisé. Je me suis connecté à la base de données Magento en externe.

Étonnamment, les données sont insérées dans la table de base de Magento et également dans la table personnalisée, mais pourquoi me donne-t-on cette erreur après la sauvegarde du produit ...?

J'ai effacé le cache, les cookies du navigateur . Supprimez également/var/cache, /var/session.on continue à donner une erreur . Quelqu'un peut-il proposer une solution?

12
Prat

le message signifie que vous effectuez une autre insertion avec la même combinaison de colonnes faisant partie de IDX_STOCK_PRODUCT, qui semble être défini comme UNIQUE. Si c'est le cas, il ne permet pas d'entrer deux fois la même combinaison (il semble que cela se compose de deux champs). 

Si vous insérez des enregistrements, assurez-vous de choisir un nouvel identifiant d’enregistrement ou que la combinaison identifiant d’enregistrement et autre colonne est unique. 

Sans une structure de table détaillée et votre code, nous ne pouvons pas deviner ce qui ne va pas.

12
Radek

Cette erreur est souvent causée par la mise à jour d'un produit dans l'observateur de votre module personnalisé, comme indiqué ci-dessous.

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

Par conséquent, chaque fois que vous enregistrez votre produit après la mise à jour de propriétés dans l'observateur de votre module, utilisez $product->getResource()->save($product) au lieu de $product->save().

3
Tahir Yasin

Vous avez peut-être oublié d'incrémenter automatiquement le champ id.

1
Rhys

votre valeur de colonne est déjà dans la table de base de données cela signifie que votre colonne de table est Uniquevous devriez changer votre valeur et réessayer 

0
Adeel Ahmed