EC-CUBE本体でのmigration用のファイルの生成について説明します。
Edit me

概要

  • EC-CUBE 3系のマイナーバージョンアップに伴って変更されたDB定義の稼働環境への反映を自動化します。
  • DB定義の変更とは、テーブルの作成、削除、フィールドの作成、削除、インデックスの作成、削除、レコードの挿入、更新、削除等です。
  • マイグレーション処理はDoctrime migrationモジュールを使用します。
  • Doctrime migrationモジュールを使用することで、EC-CUBEのソースコードに定義されたDB定義とDBサーバ上のDB定義を比較し、必要なDB定義の変更だけをDBサーバに適応します。

DBマイグレーション処理の構成

  • migrationにはDoctrine-migrationモジュールを使用し、Silexから呼び出すためのServiceProvider(https://github.com/dbtlr/silex-doctrine-migrations)をラッパーとして使用します。
  • マイグレーション処理は当初はコンソールから起動する前提です。
  • Webインストーラ作成の際にはインストーラから起動可能にします
  • マイグレーションファイルはsrc/Eccube/Resource/doctrine/migrationに配置します。

マイグレーションの作成手順

  • Doctrineのテーブル定義ファイル(src/Eccube/Resource/doctrine/)を修正します。 (テーブル定義を変更しない場合は不要です)

  • 空のマイグレーションファイルを作成します。

    $ php app/console migrations:generate

    Generated new migration class to “/var/www/html/ec-cube/src/Eccube/Resource/doctrine/migration/Version20150519204013.php”

  • 上で作成したマイグレーションファイルのupメソッド定義に変更内容を記述します。 変更の処理は以下の方法で記述が可能です。
    • SchemaManagerを使ったテーブル定義の操作($table=$schema->createTable(“foo”)など)
    • EntityManagerを使ったレコードの操作($em->persist($customer)など)
    • リテラルとして埋め込んだSQLを直接実行(非推奨)
  • 同様にdownメソッド定義にDB定義のロールバックに必要な処理を記述します。

マイグレーションの受け入れ手順

  • EC-CUBEのソースコードを更新します。
  • 作成されたマイグレーションをDBに反映します。

    $ php app/console migrations:migrate

    Doctrine Database Migrations
    
    WARNING! You are about to execute a database migration that could result in schema changes and data lost. Are you sure you wish to continue? (y/n)y
    

    (何も出力されませんが反映されています。既にDB定義がソースコードに追従済みの場合は、Nothing to migrateと表示されます)

マイグレーション状況の確認

  • 適応が必要なマイグレーションの有無や現状のDB定義のバージョンを確認するには、migrationのステータスを取得します。

    $ php app/console migrations:status

2系からのバージョンアップは別途検討します….

EC-CUBE 開発者向けDBマイグレーションガイド

テーブル定義の変更手順

はじめに

マイグレーション機構の用途としては、DDL(テーブル定義変更)の実行とDML(初期レコード定義)の実行の二種類があります。 それぞれ作成手順を記載します

DDL用のマイグレーションファイルの作成手順

1.マイグレーションファイルを作成

(php app/console migrations:generate)

2.マイグレーションファイルのup,downメソッド内に変更手順を記述する

ただし、既に予定の変更の内容が実施済みの場合は無視するように設定すること (クリーンインストール時のorm:schema-tool:createを実行した場合の動作と重複してしまうため)

3.doctrineのテーブル定義ファイル(yml)を2の内容に合わせて作成又は編集する

4.doctineのentity、repositoryを3の内容に合わせて編集する

5.コマンドラインからマイグレーションを実行(php app/console migrations:migrate)し、想定したDB定義となることを確認する

6.Webインストーラからクリーンインストールを実行し、5と同じDB定義になることを確認する

DML用のマイグレーションファイルの作成手順

1.マイグレーションファイルを作成 (php app/console migrations:generate)

2.マイグレーションファイルのup,downメソッド内に変更手順を記述する DML用の場合はDDLと違い実施内容のチェックは必要なし

3.コマンドラインからマイグレーションを実行(php app/console migrations:migrate)し、想定した初期データが挿入されることを確認する

Doctrineを使ってのマイグレーション

Entityファイル作成

yamlを更新後、下記を実行するとEntityが作成される。
元のソースは削除されずに、存在しない項目のみ追記される。

vendor/bin/doctrine orm:generate:entities --extend="Eccube\Entity\AbstractEntity" src

DBへのマイグレーション

vendor/bin/doctrine orm:schema-tool:update

を実行してmigration可能かどうかを確認

vendor/bin/doctrine orm:schema-tool:update --dump-sql

を実行してsqlを確認

vendor/bin/doctrine orm:schema-tool:update --force

を実行してDBへマイグレーション

Tags: