ECCUBE3でのマイグレーションファイルによるテーブルへの項目追加方法をご紹介します。

phpMyAdminやAdminerで追加してもかまいませんが、Migrationファイルを作成して実行すればGitで管理しメンバー間でデータベースの状態を共有可能であることや、再インストール時に自動で適用されるなど様々なメリットがあります。

弊社では効率的な開発のためにテーブルの追加/削除・列の追加/削除だけでなく、ブロックの追加や配置変更、EC-CUBEの設定変更などは必ずマイグレーション作成によって行うことを徹底しています。

※ただし本番で使用するレンタルサーバーによってはそもそもSSH接続ができないなどの理由でMigrationが実行できない場合もあります。ゆくゆくは管理画面からも実行できると良いなと思います。

実際の手順

まずはターミナル(Mac)でマイグレーション生成コマンドを実行します。

$ php app/console migrations:generate

すると/src/Eccube/Resource/doctrine/migration/ディレクトリ内にVersion20170321092503.phpのようなファイルが作成されます。

今回はこのファイルを編集して受注詳細テーブル(dtb_order_detail)へpendingというカラムを追加する方法をご紹介します。タイプはboolean(smallint)にします。

 

upメソッド

upメソッドにはカラムを追加するコードを記述します。$schema->getTable()でテーブルインスタンスを取得し、$table->addColumn()で列を追加しています。

    /**
     * @param Schema $schema
     */
    public function up(Schema $schema)
    {
        // this up() migration is auto-generated, please modify it to your needs
        $table = $schema->getTable('dtb_order_detail');
        if(!$table->hasColumn('pending')){
            $table->addColumn('pending', 'boolean')->setDefault(0);
        }
    }

downメソッド

downメソッドの中にカラムを削除するコードを記述します。(コマンドで元に戻したい時のために)

    /**
     * @param Schema $schema
     */
    public function down(Schema $schema)
    {
        // this down() migration is auto-generated, please modify it to your needs
        $table = $schema->getTable('dtb_order_detail');
        if($table->hasColumn('pending')){
            $table->dropColumn('pending');
        }
    }

マイグレーションの実行

ターミナルでマイグレーションを実行します。

php app/console migrations:migrate

dtb_order_detailテーブルにpendingカラムが追加されていることをご確認ください。

マイグレーションの取り消し

マイグレーションを取り消して元の状態へ戻したい時は次のコマンドを実行します。

php app/console migrations:execute --down 20170321092503

dtb_order_detailテーブルからpendingカラムが削除されています。

 

基本的な使用方法は以上になります。

DBの変更をマイグレーションで行うようにすれば開発効率を上げる、バグを減らすなどの効果が見込めますのでぜひお試しください。

参考サイト:http://symfony.com/doc/current/doctrine.html


関連するカスタマイズ

マイグレーションでショップ設定を変更・共有する方法... 弊社ではショップ設定を変更する時は必ずマイグレーションファイルの実行により行います。 例えば初期状態では有効になっている仮会員を無効にしたり、自動ログイン機能をONにすることを前提にカスタマイズを行なっていく場合などです。 $ php app/console migrations:gen...
Doctorineで設定できるフィールドタイプ... EC-CUBE3が採用しているSymfonyの標準ORM、Doctorineで設定できるフィールドタイプをまとめました。 EC-CUBE3で開発するならこれはもう覚えちゃっても良いかもしれませんね。 dcm.ymlやマイグレーションで頻繁に使いますからね。 stringやintegerのよ...
Your proxy directory “/var/www/src/Eccube/..... SSHからマイグレーションなどapp/consoleのコマンドを実行しようとした際に、ドクトリンのキャッシュファイルを書き込めないために発生するエラーです。 通常app/cache/doctrine/proxiesは所有者もグループもapacheとなるため、コマンドラインから他のユーザ...
基本税率を切り捨て、切り上げ、四捨五入に変更... 開発メンバー全員のルールを揃えておくことが重要です。 dtb_tax_ruleテーブルのcalc_ruleの設定値は次の表の通りです。 calc_rule 方式 1 四捨五入 2 切り捨て 3 切り上げ これをマイグレーションで...