4系では商品や配送方法など様々なデータを削除しようとした時に「関連するデータ」があるために削除できませんでしたというメッセージが出るようになっています。
3系ではなかったこのメッセージの理由をご紹介します。

「関連するデータ」とは何か?

商品の削除を実行しようとした場合、4系では論理削除ではなく物理削除を行います。3系では主に論理削除を行なっていました。

4系では商品→受注明細のように外部キーに該当するレコードが存在すれば物理削除できずエラーとなります。

外部キー制約から削除できなかった場合、関連するデータがあるため「彩のジェラートCUBE」を削除できませんでしたというメッセージが表示されます。

関連する商品があるため商品を削除できませんでした

削除をどう考えればいいのか?

EC-CUBE4系ではステータスを「廃止」にすることが、3系での「削除」とほぼ同等の仕組みになっています。

EC-CUBE4系での削除は、商品登録直後のみ使用できる、誤ったデータを消すための機能だと考えてください。

どうしても商品データを物理的に削除したい場合は?

該当商品の注文が入ってしまっている場合

基本的に注文が入っていれば削除することはあきらめましょう。 dtb_order_itemと紐づいている場合でもどうしても削除したいのであれば、代わりの商品データを「非公開ステータス」で用意して、dtb_order_item.product_idの値を全てそちらに置き換える方法があります。

該当商品の注文は入っていないがカートには入っている場合

注文が入る以前であれば削除しても問題発生しない可能性はあります。product_idが該当すdtb_cart_itemのレコードを削除してください。

商品データの場合はカートに商品が入っていると「dtb_cart_itemテーブル」にレコードが作成され外部キー制約となります。

今回であれば「dtb_cart_itemテーブル」内のデータを削除することで商品「彩のジェラートCUBE」を削除することができます。

※本番環境であればユーザーのカートを削除するわけなので、トラブルが発生する認識が必要です。

他のテーブルと紐づいている場合

この場合、カスタマイズされていたりプラグインが導入されていて商品データと紐づいています。

外部キー制約に該当するテーブルはどこかを突き止め、制約となっているレコードを先に削除してやることが必要です。

※もしテスト環境ではなく実際に運用中のサイトでレコードを直接削除するのであれば、非常に危険です。十分なバックアップと検証の上で行なってください。

 

ECCUBE制作トップへ

EC-CUBEカスタマイズに関するお問い合わせはこちら

    脆弱性修正