管理画面のCSV出力項目設定で列を編集する基本操作
EC-CUBEでCSVの出力項目を変えるなら、コードを触る前に管理画面の「設定 → ショップ設定 → CSV出力項目設定」を開きます。ここで出力する列とその順番を調整できます。以下はEC-CUBE 4系を前提とした説明です。
画面は左右2つのリストで構成され、左が「出力しない項目」、右が「出力する項目」です。実際のCSVに書き出されるのは、右に入っている列だけです。
CSV種別の切り替えと出力項目の入れ替え・並び替え操作
上部のプルダウンで「商品」「会員」「受注」などのCSV種別を切り替えます。設定は種別ごとに独立しているため、商品CSVをいじっても受注CSVには影響しません。
列の移動は中央の矢印ボタンで行います。左から右へ送れば出力対象になり、右側で「上へ」「下へ」を押した順序がそのままCSVの列順です。注意したいのは、最後に画面下の「登録」を押さないと保存されない点。並べ替えただけで離脱すると反映されません。
標準項目にない列を dtb_csv へ追加してCSV出力を拡張する
管理画面に並ぶ選択肢は、dtb_csv テーブルのレコードそのものです。標準にない列を出したいときは、このテーブルに行を追加すれば左リストに現れます。
手作業のINSERTでも動きますが、環境をまたいで再現させたいならマイグレーションに書くほうが確実です。
マイグレーションで重複を避けながらCSV項目を登録する実装例
本体のマイグレーションは、投入前にCOUNTで存在を確認する方式をとっています。これで二重実行やデータ移行時の重複を防げます。
$exists = $this->connection->fetchOne(
"SELECT COUNT(*) FROM dtb_csv WHERE csv_type_id = 2 AND field_name = 'point'"
);
if ($exists == 0) {
$sortNo = $this->connection->fetchOne(
'SELECT MAX(sort_no) + 1 FROM dtb_csv WHERE csv_type_id = 2'
);
$this->addSql("INSERT INTO dtb_csv (
csv_type_id, creator_id, entity_name, field_name,
disp_name, sort_no, enabled, create_date, update_date, discriminator_type
) VALUES (
2, null, ?, 'point', 'ポイント', $sortNo, false,
CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, 'csv'
)", ['Eccube\Entity\Customer']);
}
entity_name はそのCSV種別が扱うエンティティ、field_name は実際のプロパティ名です。discriminator_type は 'csv' 固定。リレーション先の値を出す場合は reference_field_name に参照カラムを指定します。
追加した項目が出力されない主な原因と enabled・sort_no の確認方法
「レコードは入れたのにCSVに出ない」という相談は、ほぼ2つの原因に絞られます。
enabledがfalseのまま:左の「出力しない項目」に留まったままで、CSVには含まれません。上記の例も初期値はfalseです。- 正しいCSV種別に紐付いていない:
csv_type_idが違うと、目的の画面に選択肢そのものが出てきません。
確認は簡単です。管理画面で対象の種別を開き、追加した項目が左右どちらのリストにあるかを見ます。右へ移して登録すれば enabled が true になり、sort_no も現在の並び順で更新されます。DBで直接確かめるなら SELECT field_name, enabled, sort_no FROM dtb_csv WHERE csv_type_id = 2 ORDER BY sort_no を流し、想定どおりの並びかを照合すると確実です。なお entity_name の表記が既存レコードとずれていると、指定したエンティティを正しく解決できず出力値が意図どおりにならない恐れがあるため、既存レコードの表記と揃えておきましょう。

EC-CUBEに関するお問い合わせ
[重要]現在公式にセキュリティサポートが切れていないPHPは8.1以上、MySQLは8.0以上で、対応しているEC-CUBEバージョンは4.2以上です。古いEC-CUBEを使っている方は適切なタイミングでバージョンアップをご検討ください。
EC-CUBEゴールドパートナー