マイグレーションとは
DBのテーブル定義は、phpMyAdminなどから手動で行うこともできますが、マイグレーションファイルという専用のファイルでDBのテーブル定義をPHPコードで管理することで、複数人での開発の時などに全てのPCで手動でテーブル定義を行わなくて済み、設定ミスを防いだり時短になります。
正確にはマイグレーションは、テーブル定義を実行するためのコマンドになります。
マイグレーションファイルの作成
マイグレーションを行うにあたって、まずはファイルを作成します。
今回は、Laravel Sailを使用するのでsailコマンドを使用します。
sail artisan make:migration create_users_table
マイグレーション名はスネークケース
(全て小文字で、単語ごとにアンダースコアで繋げる)で指定します。
テーブル名は英単語の複数形
を使用します。
コマンド実行後、新たなマイグレーションファイルがdatabase/migrations/
の下に作成されているはずです。
作成されたファイルの名前を見てみると、「日付_create_テーブル名_table.php」になっていると思います。この日付は、マイグレーションが実行されるときのタイムスタンプで、古い日時のファイルから先に実行されます。
テーブル作成
ファイルが作成できたら、具体的にテーブルを定義していきます。
作成されたマイグレーションファイルを見てみると、デフォルトでupメソッド
とdownメソッド
が定義されています。
return new class extends Migration
{
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->timestamps();
});
}
public function down()
{
Schema::dropIfExists('users');
}
}
マイグレーションファイルは、デフォルトで必要最小限のコードが記述されています。
マイグレーションのメソッド
- upメソッド : テーブルを生成するためのメソッド
- downメソッド : 作成したテーブルの変更を取り消したり削除するためのメソッド
マイグレーションの実行
マイグレーションファイルを作成、定義しただけではDBには反映されていないので、指定したマイグレーションを実行する下記のコマンドを実行します。
sail artisan migrate
コマンド実行後、確認をしてみるとテーブルが作成されているはずです。
このコマンドではすでに実行済みのものはスキップされ、未実行
のものだけが実行されます。
実行履歴の確認
これまでにどのマイグレーションが実行されているかを確認したい場合は、下記のコマンドを実行します。
sail artisan migrate:status
sail artisan migrate:status
+------+------------------------------------------------+-------+
| Ran? | Migration | Batch |
+------+------------------------------------------------+-------+
| Yes | 2014_10_12_000000_create_users_table | 1 |
| Yes | 2014_10_12_100000_create_password_resets_table | 1 |
| Yes | 2019_08_19_000000_create_failed_jobs_table | 1 |
| Yes | 2020_02_05_015307_create_albums_table | 2 |
| Yes | 2020_02_05_020352_create_photos_table | 3 |
+------+------------------------------------------------+-------+
ロールバック
マイグレーションのミスや実行済みのマイグレーションを取り消したい時は、ロールバックを使用します。
例えば、テーブル定義を変更したいときや、いついつまでのテーブルに戻したいときなどに使用することができます。
ロールバック時に実行されるメソッドは、先ほど作成したマイグレーションファイルのdownメソッドです。
マイグレーション時は、upメソッドが実行されるので、upメソッドの内容を打ち消す処理をdownメソッド内に記述します。
downメソッドには、デフォルトでテーブルを削除するためのdropIfExists
という処理が記述されています。
下記のコマンドを実行することでロールバックを実行することができます。
sail artisan migrate:rollback
ロールバックされるマイグレーションは、先ほどsail artisan migrate:statusで確認したBatch
の数字が一番大きいもの全てが取り消されます。
- その他のコマンド
コマンド | 内容 |
---|---|
sail artisan migrate:reset | 全てのマイグレーションを一括でロールバック |
sail artisan migrate:refresh | 全てのマイグレーションをロールバックしてからマイグレーションを再実行 |
sail artisan migrate:fresh | 全てのテーブル削除後にマイグレーションして、再実行 |