忍者ブログ

STEP UP BLOG

Home > ブログ > > [PR] Home > ブログ > Laravel4 > Laravelのマイグレーションロールバック

Laravelのマイグレーションロールバック

LaravelはRuby on Railsの精神をPHPでも!という方針で作られたフレームワークです。
したがってRuby on Railsの機能をいくつも受け継いでいます。
そのひとつがDBのテーブル定義に使われるマイグレーションです。
マイグレーションを利用すると、テーブル定義をPHPで記述出来るので、
特定のDBの仕様に依存せずに汎用的な定義をすることが出来ます。
また、テーブル定義の変更を履歴として持っているので、
特定の時間のテーブル定義に戻すこともロールバックで簡単に出来ます。
今回はそのLaravelのロールバックについてです。


Laravelのマイグレーションの基本はmigrationsテーブルです。
マイグレーションを実行すると、migrationsテーブルに実行したマイグレーションファイルが登録されます。
migrationsテーブルのカラムはmigrationとbatch。
migrationがファイル名で、batchが何回目のマイグレーションで実行したかの実行順となっています。
ロールバックするために
$ php artisan migrate:rollback

を実行すると、
batchが最も大きい、すなわちいちばん新しく実行したmigrationファイルのdown()を実行します。
そしてmigrationsテーブルからもそのデータが削除されます。
原理としてとてもシンプルです。


そのLaravelのマイグレーションについて、あるとき問題に気付きました。
Laravelのマイグレーションはmirationsテーブルとマイグレーションファイルの2つが揃っていることが前提です。
もしロールバックしようとして該当するマイグレーションファイルが存在しなかったらどうでしょう。
ロールバック出来なくてエラーとなります。
えー、でもファイルが無いとかあるの??
だって、ロールバックするには既にマイグレーション実行してなきゃいけないわけですよね。
しかしです。
しかし、gitで管理していてブランチをたくさん作っていると、
いろんなブランチにマイグレーションファイルが分散してしまう可能性があります。
でも他のブランチでわざわざロールバックすることなんてないでしょ。。
まあ、ないですよね。。
でも万が一が考えられます。
本当に万が一ですが。。
どのブランチでもmigrationsテーブルの内容とマイグレーションファイルを一致させておきたい。
その解決のひとつとして、
マイグレーション専用のブランチを作って、
どのブランチもそのマイグレーション専用ブランチを取り込むなどはどうでしょうか。
でもこのようにロールバックに失敗するシチュエーションなんてないですよねえ。。。
PR

Comment0 Comment

Comment Form

  • お名前name
  • タイトルtitle
  • メールアドレスmail address
  • URLurl
  • コメントcomment
  • パスワードpassword

PAGE TOP