ec-cube 2.13.3 から 4.0.3 にバージョンアップする

投稿者: | 2020-05-15
Table of Content

ec-cube 2.13.3から4.0.3 にバージョンアップをするには、「データ移行プラグイン」を使うことでデータ移行することができるが、プラグインだけでは移行できない項目がある。
(この記事でのDBはMySQL)

データ移行プラグインを実行できない場合の確認事項

  • アップロードサイズは十分か (php.ini)
  • メモリは十分か (php.ini)
  • 実行時間の設定 (apache2.conf, php.ini)

php.ini を編集しても「upload_max_filesize」が変わらない時は「.htaccess」の数値を変更(気がつかないで数時間悩んだ)。

レビューデータの移行

カラム名が異なっているが基本的には同じ。
新しいテーブルには制約がかかっているので、存在しない顧客番号、商品番号、性別番号は登録できない。

4系でなくなったカラム

  • creator_id
  • del_flg

外部キーが設定されているカラム

  • product_id
  • sex_id

移行手順

予めレビュープラグインをインストール、有効化しておく。
ここではphpMyAdminで操作

  1. 旧DB : sqlを使いcsvを出力
  2. 新DB : zipで圧縮したcsvをアップロード

注意点
csvをアップロードする際にエクスポート時に指定したカラムの区切り、エスケープ文字を合わせる。

データ出力

select 
    dtb_review.review_id as id,
    case dtb_review.sex 
        when 0 then 2
        when 1 then 1
        when 2 then 2
        else 2
    end as sex_id,
    dtb_review.product_id,
    dtb_review.customer_id,
    dtb_review.status as status_id,
    dtb_review.reviewer_name,
    dtb_review.reviewer_url,
    dtb_review.title,
    dtb_review.comment,
    dtb_review.recommend_level,
    dtb_review.create_date,
    dtb_review.update_date 
from 
    dtb_review
join dtb_products
    on dtb_review.product_id = dtb_products.product_id
where 
    dtb_review.del_flg = 0 and dtb_products.del_flg = 0
order by 
    dtb_review.review_id

メールマガジンデータ移行

移行手順

予めメールマガジンプラグインをインストール、有効化しておく。
ここではphpMyAdminで操作

  1. 旧DB : sqlを使いcsvを出力
  2. 新DB : zipで圧縮したcsvをアップロード

テンプレート

データ出力

select
    template_id,
    subject,
    body,
    '' as html_body,
    create_date,
    update_date
from
    dtb_mailmaga_template
where
    del_flg = 0
order by
    template_id

配信履歴

データ出力

select
    send_id,
    case creator_id
        when 1 then 1
        when 2 then 2
        when 3 then 3
        else 3
    end creator_id,
    mail_method,
    subject,
    body,
    '' as html_body,
    send_count,
    complete_count,
    0 as error_count,
    start_date,
    end_date,
    search_data,
    create_date,
    update_date
from
    dtb_send_history
where
    del_flg = 0
order by
    send_id

お気にりデータ移行

  1. 旧テーブルをリネームして新DBにインポート

dtb_customer_favorite_products -> dtb_customer_favorite_products_v2

  1. お気に入りデータの登録
insert into dtb_customer_favorite_product(customer_id, product_id, create_date, discriminator_type)
select
    customer_id, product_id, create_date, update_date
from 
    dtb_customer_favorite_products_v2

商品 サブ情報の画像データ移行

2系にあったサブ情報の画像はdtb_product_imageに登録する。

旧テーブルをリネームして新しいDBにインポート
dtb_products -> dtb_products_v2

サブ情報の画像のみを抽出するviewを作成する。

CREATE VIEW v_products_image_list AS 
select
    product_id,
    case sub_large_image1
        when '' then sub_image1
        else sub_large_image1
    end as image1,
    case sub_large_image2
        when '' then sub_image2
        else sub_large_image2
    end as image2,
    case sub_large_image3
        when '' then sub_image3
        else sub_large_image3
    end as image3,
    case sub_large_image4
        when '' then sub_image4
        else sub_large_image4
    end as image4,
    case sub_large_image5
        when '' then sub_image5
        else sub_large_image5
    end as image5,
    case sub_large_image6
        when '' then sub_image6
        else sub_large_image6
    end as image6 
from
    dtb_products_v2
where 
    del_flg = 0
order by
    product_id

次にサブ画像を登録

insert into dtb_product_image (product_id, creator_id, file_name, sort_no, create_date, discriminator_type)
select 
    product_id, 3 as creator_id, image as file_name, sort_no, now() as create_date, 'productimage' as discriminator_type
from (
select product_id, image1 as image, 2 as sort_no from v_products_image_list
union all
select product_id, image2 as image, 3 as sort_no from v_products_image_list
union all
select product_id, image3 as image, 4 as sort_no from v_products_image_list
union all
select product_id, image4 as image, 5 as sort_no from v_products_image_list
union all
select product_id, image5 as image, 6 as sort_no from v_products_image_list
union all
select product_id, image6 as image, 7 as sort_no from v_products_image_list
order by 
    product_id
) as tmp
where
    tmp.image is not NULL and tmp.image != ''

参考URL

コメントを残す

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

CAPTCHA