Pomagam handlowcowi znaleźć podstawową przyczynę niektórych nieudanych transakcji płatniczych (w dniu dużego zamówienia), które zakończyły się błędem z następującym błędem
SQLSTATE [23000]: Naruszenie ograniczenia integralności: 1062 Zduplikowany wpis „51986” dla klucza „UNQ_SALES_FLAT_INVOICE_INCREMENT_ID”
UNQ_SALES_FLAT_INVOICE_INCREMENT_ID
Indeks jest unikalny klucz na increment_id
kolumnie w sales_flat_invoice
tabeli. Kiedy szukam w tej tabeli informacji o increment_id
błędzie ( 51986
), stwierdzam, że jest tam już faktura increment_id
i dotyczy zamówienia złożonego przez innego klienta.
Moje 2 pytania z tym związane
Gdzie w Magento CE 1.9.0.1 zwykle tworzy się identyfikator faktury?
Czy znane są problemy w magazynie Magento CE 1.9.0.1 z kolidującymi identyfikatorami faktur dla prawie równoczesnych zamówień?
Zdaję sobie sprawę, że identyfikator przyrostu 51986
oznacza, że sklep ma jakieś rozszerzenie do zmiany zainstalowanych identyfikatorów przyrostowych, ale chcę się upewnić, że nie ma do tego wiedzy naukowej w / r / t, zanim przejdę zbyt daleko.
źródło
save()
wywołanie metody w konkretnym zdarzeniu obserwatora, co czasami powodowało ten problem - na kilka dni przed przeglądem kodu;)Odpowiedzi:
Zamówienie, faktura, kredyt, wysyłka była EAV do 1.6 (?)
@ Faktura Prateek BYŁA modelem EAV, a increment_id nadal jest.
Increment_id tworzenie i problem
Identyfikator przyrostu jest tworzony tutaj
Zakładałbym, ponieważ w ostatniej metodzie transakcja jest uruchamiana (a tabela / wiersz nie jest zablokowana) tworzenie drugiego zamówienia może przejść obok tego samego nowo utworzonego
increment_id
.Rozwiązanie
Zakładam, że jeśli zablokujesz wiersz / tabelę przed odczytem, możesz uniknąć tego, że jakikolwiek inny proces odczytuje tabelę, dopóki nie napiszesz nowego parametru increment_id. Może to pomóc: Jak zablokować wiersz po użyciu load ()?
Obawiam się jednak, że zablokowanie szeregu powoduje pogorszenie wydajności.
źródło