2015/11/30 Category : Laravel4 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