2012-04-06 32 views
11

Trong khi tạo sản phẩm, tại bước cuối cùng sau khi lấy trong một thời gian, mang đến cho Magento sau sai sót:SQLSTATE [23000]: Liêm chính hạn chế vi phạm: 1062 nhập trùng lặp '1922-1' cho khóa 'IDX_STOCK_PRODUCT'

SQLSTATE [23000]: Liêm chính hạn chế vi phạm: 1062 nhập trùng lặp '1922-1' cho khóa 'IDX_STOCK_PRODUCT'

Những gì tôi đang làm được, bằng cách bắt id sản phẩm, tôi đưa nó vào trong bảng tùy chỉnh. Tôi đã kết nối với cơ sở dữ liệu Magento bên ngoài.

Dữ liệu đáng ngạc nhiên được chèn vào cả bảng cơ sở của Magento & cũng trong bảng tùy chỉnh nhưng tại sao nó lại cho tôi lỗi đó sau khi tiết kiệm sản phẩm ...?

Tôi đã xóa bộ nhớ cache, cookie của trình duyệt. Cũng xóa/var/cache,/var/session. vẫn đưa ra lỗi. Ai có thể đề xuất giải pháp?

+0

Lỗi này có nghĩa là bạn đang sử dụng cùng một giá trị khóa chính hai lần trong cùng một bảng. Đã có một sản phẩm có ID là '1922-1' trong' IDX_STOCK_PRODUCT' và truy vấn đang cố lưu một bản ghi mới với ID đó một lần nữa. – mrlee

+0

Whats giải pháp sau đó? – Prat

+0

Về cơ bản, không lưu dữ liệu với ID trùng lặp. Nếu không có bất kỳ mã mẫu nào liên quan đến lỗi này, đó là giải pháp tốt nhất bạn sẽ nhận được. – mrlee

Trả lời

11

thông điệp có nghĩa là bạn đang làm một chèn với sự kết hợp cùng một cột là một phần của các IDX_STOCK_PRODUCT, mà seams được định nghĩa là UNIQUE. Nếu nó là như vậy, nó không cho phép để nhập cùng một sự kết hợp (nó có vẻ như nó bao gồm hai lĩnh vực) hai lần.

Nếu bạn đang chèn hồ sơ, chắc chắn rằng bạn đang chọn thương hiệu mới id hồ sơ hoặc rằng sự kết hợp của id kỷ lục và cột khác là duy nhất.

Nếu không có cấu trúc bảng chi tiết và mã của bạn, chúng tôi khó có thể đoán whats đi sai.

+0

Bạn đang ở bên phải Radek, tôi đang tìm nạp SKU & entity_id trong bảng tùy chỉnh của tôi. Trong bảng tùy chỉnh của tôi, tôi chỉ có 4 cột-: No., entity_id, SKU & timestamp .... Tôi nên đặt những hạn chế nào vào bảng đó? – Prat

1

Bạn có thể đã quên increment tự động lĩnh vực id.

+0

Chìa khóa là một khóa hợp chất trong trường hợp này, vì vậy tự động gia tăng không có gì để làm với nó. – PanPipes

3

Nhiều lần lỗi này là do khi bạn cập nhật một sản phẩm trong quan sát mô-đun tùy chỉnh của bạn như hình dưới đây.

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

Do đó bất cứ khi nào bạn tiết kiệm sản phẩm của bạn sau khi cập nhật một số tài sản trong quan sát của mô-đun của bạn sử dụng $product->getResource()->save($product) thay vì $product->save()

-1

Cố gắng thay đổi FK để INDEX thay vì UNIQUE.

-4

Tôi vừa thêm biểu tượng @ và nó bắt đầu hoạt động. Như thế này: @$product->save();

+1

Việc sử dụng '@' là một thực tế tồi tệ phải tránh được bằng mọi giá! –

+1

Như Victor nói @ nên tránh vì nó ngăn chặn các thông báo lỗi. Có thể tìm thấy chi tiết về [Kiểm soát lỗi PHP tại đây] (http://php.net/manual/en/language.operators.errorcontrol.php) – PanPipes

Các vấn đề liên quan