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