Bütünlük kısıtlaması ihlali: 1062 'UNQ_SALES_FLAT_INVOICE_INCREMENT_ID' anahtarı için yinelenen giriş


13

Bir satıcının, aşağıdaki hata ile başarısız olan bazı başarısız ödeme işlemlerinin (ağır sipariş günü sırasında) kök nedenini izlemesine yardımcı oluyorum

SQLSTATE [23000]: Bütünlük kısıtlaması ihlali: 1062 'UNQ_SALES_FLAT_INVOICE_INCREMENT_ID' anahtarı için '51986' yinelenen girişi

UNQ_SALES_FLAT_INVOICE_INCREMENT_IDEndeks üzerinde eşsiz bir anahtardır increment_idsütun sales_flat_invoicemasaya. Bu tabloda increment_idhatada ( 51986) belirtilenlere baktığımda, bununla bir fatura zaten increment_idvar ve farklı bir müşteri tarafından verilen bir sipariş için.

Bununla ilgili 2 sorum

  • Magento CE 1.9.0.1'de normal olarak bir fatura kimliği nasıl oluşturulur?

  • Magento CE 1.9.0.1 hisse senedinde, hemen hemen eşzamanlı siparişler için fatura kimliklerinin çarpışmasında bilinen sorunlar var mı?

51986Mağazanın artan ID'lerini değiştirmek için bir çeşit uzantıya sahip olduğu anlamına gelen artım kimliğinin farkındayım , ancak bu yoldan çok önce gitmeden önce bilime w / r / t bilinmediğinden emin olmak istiyorum.


1
Hata ayıklama noktası olarak Mage_Eav_Model_Entity_Type :: fetchNewIncrementId () ekleniyor.
Alan Storm

1
Bunu daha önce gördüm, ancak birisinin save()bazen bu soruna neden olacak belirli bir gözlemci olayına bir yöntem çağrısı yerleştirmesinden kaynaklanıyordu - kod incelemesinden önceki günlerde;)
Erfan

@AlanStorm, sadece meraktan, neden Eav varlığına girerken, Fatura'nın düz bir model olduğunu düşünüyorum.
Prateek


1
Bu eski biliyorum, ama eav_entity_store tablo herhangi bir nedenle kopyalandı .. Bu yaygın bir hatadır, burada son sipariş kimliği geçerli sipariş ile eşleşmiyor. Böylece Magento, sipariş tablosuna hangi kimliğin ekleneceğini belirlemek için eav_entity_store tablosunu kullanır ve bu durumda zaten var olur. Ayrıca, bu kontrolü atlayıp bu sorunun maviden çıkmasına neden olabileceğinden, bunun FooMan sipariş numarası uzantısında çok yaygın bir sorun olduğunu unutmayın.
Rob

Yanıtlar:


3

Sipariş, fatura, creditmemo, gönderim 1.6'ya kadar EAV oldu (?)

@Prateek faturası bir EAV modeliydi ve increment_id yine de.

Artış kimliği oluşturma ve sorun

Artım kimliği burada oluşturulur

\Mage_Eav_Model_Entity_Attribute_Backend_Increment which calls
\Mage_Eav_Model_Entity_Abstract::setNewIncrementId which calls
\Mage_Eav_Model_Entity_Type::fetchNewIncrementId

Son yöntemde işlem başlatılır (ve tablo / satır kilitli değildir) çünkü ikinci bir sipariş oluşturma geçebilir ve aynı yeni oluşturulan alabilir kabul ediyorum increment_id.

Çözüm

Okumadan önce satırı / tabloyu kilitlerseniz, yeni bir increment_id yazana kadar diğer işlemlerin tabloyu okumasını önleyebilirsiniz. Bu yardımcı olabilir: load () kullandıktan sonra bir satırı nasıl kilitlerim?

Ama korkarım, sıra kilitlemenin kötü performans kaybı yaratması.


1
Sadece bu gönderiyi gördüm ve @Fabian, bunu bilmek güzel. Bir cevapta birinden bahsedildiğinde SE bildirimleri de tetiklemelidir.
Prateek
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.