要望や症状
EC-CUBE 2系から移行したサイトで、管理画面の基本設定でポイント付与率を変更したにも関わらず、注文後に付与されるポイントが設定した値と異なるケースがあります。
理由や原因
EC-CUBE 4系では、商品データ(dtb_product_classテーブル)のpoint_rateフィールドに値が設定されている場合、そちらの値が基本設定のポイント付与率より優先される仕様となっています。
この問題は特に、EC-CUBE 2系から移行したサイトで発生しやすい現象です。EC-CUBE 2系では商品ごとのポイント付与率設定が一般的に利用されていたため、データ移行時にこれらの個別設定値がそのまま保持されます。その結果、管理者が基本設定で付与率を変更しても、個別に設定された商品のポイント付与率が優先され、変更が反映されない状況が発生してしまいます。
解決策
商品個別のポイント付与率をnullに設定することで、基本設定のポイント付与率が適用されるようになります。
事前確認
作業を始める前に、現在どの程度の商品に個別のポイント付与率が設定されているかを確認します。
SELECT COUNT(*) FROM dtb_product_class WHERE point_rate IS NOT NULL;
バックアップの作成
データベースの変更を行う前に、必ずバックアップを作成してください。
# MySQLの場合
mysqldump -u username -p database_name > backup_$(date +%Y%m%d_%H%M%S).sql
検証環境での事前テスト
本番環境で実行する前に、検証環境で以下の手順を実施し、想定通りの結果が得られることを確認してください。
データベースでの一括変更
全商品の個別ポイント付与率をnullに設定するSQLを実行します。
UPDATE dtb_product_class SET point_rate = null;
特定の商品のみポイント付与率を個別に設定したい場合は、対象商品を除外するWHERE句をSQLに追加してください。例えば、商品ID 100番を除外する場合は以下のようになります。
UPDATE dtb_product_class SET point_rate = null WHERE product_id != 100;
動作確認
SQLの実行後は、以下の手順で正常に動作することを確認してください。
- 管理画面で基本設定のポイント付与率が表示されることを確認
- テスト注文を行い、基本設定の付与率でポイントが正しく計算されることを確認
- 複数の商品で同様の動作確認を実施
注意事項
データベースの直接変更は不可逆的な操作です。作業前のバックアップ取得は必須となります。また、本番環境での作業前には、必ず検証環境で十分なテストを実施してください。