エンジニ屋.com(エンジニヤドットコム)

分かりやすくを意識して情報発信!

【応用可】CSV出力の項目を追加する方法【Eccube4】

商品登録に追加されたオリジナル項目をCSV出力項目に追加する

イメージ画像

CSV出力項目設定

前提

JANコードというオリジナルの項目は既に追加されているとします。

商品登録に項目の追加方法を知りたい方は、 こちらをどうぞ! enginiya.com

CSV出力項目設定に項目名を表示

CSVの出力は、管理画面の店舗設定→CSV出力項目設定で確認できます。 このページで、出力する項目と出力しない項目を設定できます。

項目設定情報は、データベースのdtb_csvのレコードで定義されています。
なので、項目を追加させたい場合は、データベース上のレコードを追加する必要があります。追加方法としては、直接、DBのテーブルにレコードを追加しても問題ありません。
他の方法として、マイグレーションファイルを作成して、DBに反映する方法や、SQLファイルを作成してDBに読み込ますという方法もあります。
開発現場では、それぞれのローカル環境や本番環境など環境を合わせる必要があるので、マイグレーションファイルが採用されていると思います。 本記事でもマイグレーションファイルを使用する方法でレコードの更新作業を進めていきます。
では、マイグレーションファイルの作成の為にコマンドを実行します。

php bin/console doctrine:migrations:generate


マイグレーションファイルファイルが作成されたので、ファイルの中身を変更していきます。

<?php declare(strict_types=1);

namespace DoctrineMigrations;

use Doctrine\DBAL\Schema\Schema;
use Doctrine\Migrations\AbstractMigration;

/**
 * Auto-generated Migration: Please modify to your needs!
 */
final class Version20211117122117 extends AbstractMigration
{
    public function up(Schema $schema) : void
    {
        // this up() migration is auto-generated, please modify it to your needs
        $sql = <<<SQL
            INSERT INTO dtb_csv VALUES
            (null, 1, null, 'Eccube\\\\Entity\\\\Product', 'jan_code', null, 'Janコード', 32, 1, NOW(), NOW(), 'csv')
        SQL;

        $this->addSql($sql);
    }

    public function down(Schema $schema) : void
    {
        // this down() migration is auto-generated, please modify it to your needs

    }
}

コードを追加した箇所は、16行目から21行目です。 マイグレーションでの書き方は他にもありますが、ここでは分かりやすい、生のSQLコードを直接記載する方法でレコードを追加したいと思います。
変数$sqlにヒアドキュメントでSQLコードを格納しています。 INSERT INTO でテーブル名を指定してVALUESでカラムの順に値を入れてます。
重要な部分を抜き出して説明していくと、左から2番目の1は、csvの種別を選択しています。今回は商品CSVに項目を追加したいので、1としています。その右は、取り出したい値が定義されているEntityを指定しています。その右は、Entityの定義名、その2つ右は、表示される項目名です。
その後に格納したSQLを実行させるaddSql()メソッドを書いています。
それでは用意ができたら、マイグレーションファイルを実行させるコマンドを実行します。 php bin/console doctrine:migrations:migrate

これで、データベースにはレコードが追加されて、CSV出力項目設定には、新たに項目が追加されました。 CSVダウンロードは、商品一覧画面にあります。ここからダウロード可能です。

それでは以上です。 SQL文の内容をそれぞれの項目に沿った条件を入れると応用は効くと思います。

Have a nice development day!