{{tag>php, phinx, composer}}
====== PHP Phinx でデータベースマイグレーション ======
===== 公式 =====
公式のページからドキュメントは CakePHP のドキュメントサイトに飛びます。CakePHP のドキュメントサイトは日本語訳を表示することができます。
* https://phinx.org/
* https://book.cakephp.org/phinx/0/ja/index.html
===== インストール =====
既に存在するマイグレーションを行う対象のプロジェクトに composer を使ってインストールします。
php composer.phar require robmorgan/phinx
===== コマンドの実行 =====
各種コマンドは vendor/bin/phinx を使って行います。
==== マイグレーションの初期化 ====
vendor/bin/phinx init
上記はマイグレーション初期化のコマンドでプロジェクトのルートディレクトリ直下に db/migrations フォルダを作成します。
==== マイグレーションクラスの作成 ====
vendor/bin/phinx create SomeMigrationClassName
このコマンドを実行すると db/migrations フォルダに YYYYMMDDHHMMSS_some_migration_class_name.php というファイルが出来ます。
作成されたファイルに書かれたコマンドをファイル名の日付順に実行することによって、テーブルの操作を行います。
このファイル名をどう決めるかはかなり重要になってきます。ファイル名に含める要素は、操作対象のテーブル、操作対象の内容、操作を行う理由、などが考えられます。
* CreateNewTableNameForNewFeature
* AddNewColumnsOnTableNameForNewFeature
などでしょうか。これ以上の細かい内容は、コード中や Git のコメントで補う形になるでしょう。
その他、以下の様なコマンドが用意されています。なお、以下のコマンドの共通のオプションとしては、コマンドを反映する環境を -e ENVIRONMENT オプションで指定できます。
* migrate マイグレーションを実行する
* rollback マイグレーションを戻す
* 特定のバージョンにロールバックするには、-t YYYYMMDDHHMMSS を指定する
* status マイグレーション状況を表示する
* breakpoint どこまでロールバックするかを指定する
* seed:create データベースの初期データを投入するためのクラスファイルを作成
* seed:run データベースの初期データ作成クラスファイルを実行する
vendor/bin/phinx migrate -e production SomeMigrationClassName
===== マイグレーションクラスの編集 =====
table('attendances');
$table->addColumn('work_on', 'date')
->addColumn('user', 'string')
->addColumn('name', 'string', ['null' => true])
->addColumn('begin_at', 'string', ['null' => true])
->addColumn('end_at', 'string', ['null' => true])
->addColumn('created_at', 'datetime')
->addColumn('created_by', 'string', ['null' => true])
->addColumn('updated_at', 'datetime')
->addColumn('updated_by', 'string', ['null' => true])
->addColumn('deleted_at', 'datetime', ['null' => true])
->addColumn('deleted_by', 'string', ['null' => true])
->addIndex(['work_on', 'user'], ['unique' => true, 'name' => 'UNQ_work_on__user'])
->save();
}
}