SQLSTATE [23000]: Нарушение ограничения целостности: 1062 Дублируемая запись '1922-1' для ключа 'IDX_STOCK_PRODUCT'

При создании продукта на последнем шаге после извлечения на некоторое время Magento дает следующую ошибку:

SQLSTATE [23000]: Нарушение ограничения целостности: 1062 Дублирующая запись '1922-1' для ключа 'IDX_STOCK_PRODUCT'

То, что я делаю, это захват идентификатора продукта, я помещаю его в пользовательскую таблицу. Я подключился к базе данных Magento извне.

Удивительно, что данные вставляются как в базовую таблицу Magento, так и в пользовательскую таблицу, но почему она дает мне эту ошибку после сохранения продукта...?

Я очистил кеш, куки файлы браузера. Также удалите /var/cache,/var/session. все еще давая ошибку. Может ли кто-нибудь предложить решение?

Ответ 1

сообщение означает, что вы делаете другую вставку с той же комбинацией столбцов, которые являются частью IDX_STOCK_PRODUCT, которые могут быть определены как UNIQUE. Если это так, он не позволяет дважды ввести одну комбинацию (похоже, она состоит из двух полей).

Если вы вставляете записи, убедитесь, что вы выбираете новый идентификатор записи или что комбинация идентификатора записи и другого столбца уникальна.

Без детальной структуры таблицы и вашего кода мы вряд ли можем догадаться, что происходит не так.

Ответ 2

Много раз эта ошибка возникает при обновлении продукта в пользовательском наблюдателе модуля, как показано ниже.

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

Следовательно, всякий раз, когда вы сохраняете свой продукт после обновления некоторых свойств наблюдателя модуля, используйте $product->getResource()->save($product) вместо $product->save()

Ответ 3

Возможно, вы забыли автоматическое увеличение поля id.

Ответ 4

значение вашего столбца уже находится в таблице базы данных это означает, что ваш столбец таблицы является уникальным Вы должны изменить свою ценность и попробуй еще раз

Ответ 5

Я также столкнулся с этой проблемой. Я обнаружил, что после изменения механизма хранения таблиц с MyISAM на Innodb проблема решена.

Ответ 6

Попробуйте изменить FK на INDEX вместо UNIQUE.

Ответ 7

Я просто добавил символ @, и он начал работать. Например: @$product->save();