Magento1.6の管理画面で商品を修正すると、SQLエラーが出る

1.4.2 で開発していた Magento を 1.6 に移行する作業を年末年始で行っていたのですが、だいたい完了したかなーと思った時に、困ったエラーに遭遇してしまいました。

カタログー商品管理で、商品を編集すると、編集は完了するのですが下記の警告が表示されます。

SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry ‘n-0-1’ for key 1
(n は、データベース上の商品ID)

意味としては、データベース上にエントリが重複しているということです。
放っておくと大変なことになりかねません。
移行作業で商品データをCSVでインポートしたり、データベース上でSQLで商品データを削除したりしているので、「何かやっちゃったかなー」と、かなり焦りました。

でも、どうやら私のせいではなかったようです。
警告メッセージの内容でググったら、こんな記事を見つけました。

Issues with Special Price and SQL error on product save (+ editing in cart?)
https://github.com/organicinternet/magento-configurable-simple/issues/52 

URLを見てピンとくる方もいらっしゃるかもしれませんが、この記事はエクステンション「Simple Configurable Products」に関するものです。
このエクステンションは、Configurable Products の価格を割合ではなく価格で設定できるという、地味に便利なものです。
1.5 に対応していると明記してあるので、1.6 でも使えると思っていれていたのですが、どうやらダメだったようです。

対策としては、プログラムを1行書き換えるだけです。

(対象ファイル)
app/code/community/
  OrganicInternet/SimpleConfigurableProducts/
    Catalog/Model/Resource/Eav/Mysql4/Product/Indexer/Price.php の58行目

(旧)

$this->cloneIndexTable(true);

(新)

$this->clearTemporaryIndexTable();

いやー、新年早々、ビビリました。
何が起こったかと思って、データベースの内容をしらみつぶしに見ちゃいましたからねー。

でも、1.6 は、1.4にはない便利なエクステンションが多くて結構いいですよ。
良いところについては、また後ほど記事を書きたいと想います。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です