CakePHP3 マイグレーションの基本
CakePHP3でマイグレーションの流れは以下の通り。
よくある記事では、DBAがやるべき作業なのか、開発者がやるべきなのか
曖昧に書いて有ることが多いのでそこをはっきりさせて書いていきます。
DBAのお仕事
1.DB、テーブルを作る。
兎にも角にもDB、テーブルを用意しましょう。
普通に作って大丈夫です。
2.一発目のマイグレーションファイル作成
一発目のマイグレーションは、このコマンドで作りましょう。
CakePHP3本家のドキュメントURLはこちら。
http://book.cakephp.org/3.0/ja/migrations.html#id14
bin/cake bake migration_snapshot Initial
はい、これで、Config/Migration/ にYYYYMMDDHHMMSS_Initial.phpというファイルが
出来ました。DBAの最初のお仕事はここまで。
gitにpushするなり何なりして共有しましょう。
3.テーブル定義を変更したらやること
テーブル定義を変更したら、マイグレーションファイルを作りましょう。
以下のコマンドで、今のDB状態と直前のマイグレーションを行った際のDBの状態を
比較して差分のマイグレーションファイルを作成できます。
(正確にいうと、DBとconfig/Migrations/schema-dump-default.lock の差分になります)
bin/cake bake migration_diff add_hogehoge_fugafuga
※add_hogehoge_fugafuga は任意の文字列。ファイル名になるので分かりやすい名前を。
これで、テーブル定義を変更した内容で、マイグレーションファイルを作成出来ました。
DBを使いたい人がやること(プログラマ等)
1.テーブルをまだ何も作っていない場合
先ほどDBAが作ったマイグレーションファイルよりテーブルを作成出来ます。
bin/cake migrations migrate
これ以降、DBAがマイグレーションファイルを作る度に、このコマンドを行うことで
テーブル情報を同期し続けることが出来ます。
2.既にテーブルがあって、DBAと同じ状態の場合
既にテーブルがあって、DBAと同じ場合は、
「マイグレーションはしていないけれどDBAと同じ状態」になっているので
「ここまでマイグレーションしたんだよ!信じてくれよ!」とCakeを騙すことが出来ます。
そのコマンドがこちら。
bin/cake migrations mark_migrated
これで、「今のDBの状態はマイグレーションを全て反映した状態である」という
状態を作り出せます。
正確には、「phinxlog」というテーブルが作成され、その中にマイグレーションした
ログが作成されます。
3.DBAの持っているテーブルの状態と違う場合
DBAの持っているテーブルの状態と違う場合は、2パターンの対応方法があります。
- 一度全部消してmmigrateする
- alter tableや、create tableを行って、DBAの状態に合わせる
前者の場合は、一度まっさらにして、マイグレーションを全て実行します。
bin/cake migrations migrate
後者の場合は、DBAと同じ状態になっているので、Cakeを騙しましょう。
bin/cake migrations mark_migrated