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

関連するカスタマイズ

SQL(Doctrine)のキャッシュ時間を変更してページ高速化... Doctrineでは次のようにして検索結果をキャッシュしておくことができます。商品数やカテゴリー数が多い場合は一気にページが高速化するサイトもありますので場合によってはたいへん有用です。 EC-CUBEのデフォルトでもコード内で何箇所か使用されており、$lifetimeがキャッシュの有...
既に存在するIDやRankの最大値を取得する方法... 新規データ作成やプラグインのマイグレーション作成の際に、既に存在するデータの最大値を取得したい場合があります。 そんな時は直接SQLを発行しても良いのですが、Doctrineを使用すると便利です。 商品IDの最大値を取得する方法(例:dtb_product) 次のようにQuer...
Entities passed to the choice field must be manage... 今回はDoctrineのEntityに関するちょっと難しい話題です。 choiceタイプやentityタイプのフォームでデータベースの内容を表示しようとした時(主にセレクトボックスやチェックボックス) Entities passed to the choice field must be m...
バックアップ・復元方法 EC-CUBE3のバックアップ EC-CUBEはECサイトを運営するためのものですので、バックアップが何よりも重要です。 もし何らかの問題が発生し顧客データが失われたらと考えると...私は夜も眠れません。 特に重要なことはデータベースの定期バックアップを取ることです。 デ...

弊社はEC-CUBE公式インテグレートパートナーです。