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

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

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

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

実際の手順

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

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

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

 

upメソッド

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

downメソッド

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

マイグレーションの実行

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

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

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

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

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

 

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

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

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

関連するカスタマイズ

マイグレーションでショップ設定を変更・共有する方法... 弊社ではショップ設定を変更する時は必ずマイグレーションファイルの実行により行います。 例えば初期状態では有効になっている仮会員を無効にしたり、自動ログイン機能をONにすることを前提にカスタマイズを行なっていく場合などです。 上記コマンドを実行することでマイグレーションファイルが作...
Doctorineで設定できるフィールドタイプ... EC-CUBE3が採用しているSymfonyの標準ORM、Doctorineで設定できるフィールドタイプをまとめました。 EC-CUBE3で開発するならこれはもう覚えちゃっても良いかもしれませんね。 dcm.ymlやマイグレーションで頻繁に使いますからね。 stringやintegerのよ...
decimalタイプのオプション、precisionとscaleとは?... テーブルの定義ファイル(dcm.yml)を見てみると、price02やtaxなど金額関係のカラムにはdecimal型が使われていることが分かります。 ProductClass.dcm.ymlには下記のように記載があります。 他のカラムの定義には見かけないprecisionとsca...
SQL(Doctrine)のキャッシュ時間を変更してページ高速化... Doctrineでは次のようにして検索結果をキャッシュしておくことができます。商品数やカテゴリー数が多い場合は一気にページが高速化するサイトもありますので場合によってはたいへん有用です。 EC-CUBEのデフォルトでもコード内で何箇所か使用されており、$lifetimeがキャッシュの有...