マイグレーションファイルを作成後、マイグレーションするとデータベースにデータベースの構造が反映されます。この構造を後から変更する場合にはマイグレーションファイルを追加し、マイグレーションする必要があります。ここでは、usersテーブルに新たなカラムを追加したいと思います。usersテーブルは以下のようになっています。
+-------------------+-----------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------------+-----------------+------+-----+---------+----------------+
| id | bigint unsigned | NO | PRI | NULL | auto_increment |
| name | varchar(255) | NO | | NULL | |
| email | varchar(255) | NO | UNI | NULL | |
| email_verified_at | timestamp | YES | | NULL | |
| password | varchar(255) | NO | | NULL | |
| remember_token | varchar(100) | YES | | NULL | |
| created_at | timestamp | YES | | NULL | |
| updated_at | timestamp | YES | | NULL | |
+-------------------+-----------------+------+-----+---------+----------------+
様々なフィールドがありますが、passwordの後に、管理者かどうかを確認するis_adminを追加する場合、以下のコマンドでマイグレーションファイルを作成し、追加の作業を行います。
php artisan make:migration add_is_admin_to_users_table --table=users
–table=テーブル名を追加することで、そのテーブルに関連付けられたマイグレーションファイルが作成されます。
マイグレーションファイルの規則名はカラムを追加する場合、
add_追加するカラム名_テーブル名(複数形)_table
となります。追加するカラムが複数になる場合は、
add_追加するカラム数+columns_テーブル名(複数形)_table
となります。属性を変更させる場合はaddをchangeに、削除する場合はaddをremoveにします。
生成されたマイグレーションファイルを以下のように編集します。
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::table('users', function (Blueprint $table) {
$table->boolean("is_admin")->after("password");
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::table('users', function (Blueprint $table) {
$table->dropColumn("is_admin");
});
}
};
次に以下のコマンドでマイグレーションを実行します。MySQLでデータベースの構造を確認し、以下のようになっていれば成功です。
+-------------------+-----------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------------+-----------------+------+-----+---------+----------------+
| id | bigint unsigned | NO | PRI | NULL | auto_increment |
| name | varchar(255) | NO | | NULL | |
| email | varchar(255) | NO | UNI | NULL | |
| email_verified_at | timestamp | YES | | NULL | |
| password | varchar(255) | NO | | NULL | |
| is_admin | tinyint(1) | NO | | NULL | |
| remember_token | varchar(100) | YES | | NULL | |
| created_at | timestamp | YES | | NULL | |
| updated_at | timestamp | YES | | NULL | |
+-------------------+-----------------+------+-----+---------+----------------+
以上、ここでは、マイグレーションファイルを後から変更する方法を紹介しました。これらのマイグレーションの変更は、変更対象のマイグレーションの後に行われる必要があるため、ファイルの名前順で変更用のマイグレーションファイルが後になるようにする必要があります。