Laravelではテーブル作成やカラムの追加・編集をマイグレーションで行います。
「データベースを直接操作できるから、マイグレーションを使わない」というのはNG。
他の作業者や別の環境の管理が難しくなるためで、100%世に出さないシステムでない限りマイグレーションで行うようにします。
ここではマイグレーションの基本を説明します。
マイグレーションの手順の流れ
手順は大きく4つです。
【手順1】マイグレーションファイルのひな型を作成
↓
【手順2】作成したファイルを修正
↓
【手順3】マイグレーションを実行(テーブル作成やカラムの追加・編集)
↓
【手順4】実行したマイグレーションを取り消したい場合はロールバックを実行
では、手順ごとのやり方です。
【手順1】マイグレーションファイルの作成
ターミナル(コマンドプロンプト)を起動し、laravelプロジェクトがあるディレクトリにcdし、以下のコマンドを実行します。
artisanコマンド
php artisan make:migration ファイル名artisanを実行すると、database/migrations/にファイルが作成されます。
作成されたファイル
作成されたファイルを開きます。
①upメソッドと②downメソッドの2つのメソッドが作成されています↓

①②それぞれの役割は以下となります。
大事
①upメソッド…migrate実行時(手順3)で実行されるメソッド
②downメソッド…migrateのロールバック時(手順4)で実行されるメソッド
【手順2】作成したファイルの修正
①②に処理を追加していきます。
何をしたいか(テーブルを作成したいのか、カラムを追加・編集したいか等)で処理が違ってきます。
テーブル作成時
テーブルを作成したい場合の①②それぞれのサンプルコードです。
【①upメソッド】テーブル作成時
public function up(): void
{
Schema::create('テーブル名', function (Blueprint $table) {
$table->id();
$table->longText('message');
$table->tinyInteger('enable')->nullable();
$table->timestamps();
});
}●テーブルを作成する時はcreateメソッドを使用します(Schema::createの箇所)
●「$table->カラムの型(’カラムの名前’)」でカラムの数だけ定義していきます。
例えば、以下の場合
$table->longText('message');
longText型で名前が「message」のカラムが作成される。
※他にはinteger(整数)や、string(文字列)や、date(日付)などがあります。
●チェーンメソッドでカラムの制約等を記述できる。
例えば、「->nullable()」はnullを許可する、という意味。
※他にも「->index()」(インデックス=索引)等があります。
●$table->id()は主キーとなるオートインクリメントのカラムを作成してくれる。
●$table->timestamps()は、登録日(カラム名はcreated_at)と更新日(カラム名はupdated_at)が入る日付型のカラムを作成してくれる(この項目があると、レコードの新規登録や更新を行う度にlaravelが自動的に日時を入れてくれる)
【②downメソッド】テーブル作成時
public function down(): void
{
Schema::dropIfExists('テーブル名');
}こちらは、①upメソッド(テーブル作成)を取り消す(ロールバック)処理になるのでdropIfExistsメソッド(テーブルがあれば削除)を記述する。
カラム追加時
カラムを追加したい場合の①②それぞれのサンプルコードです。
【①upメソッド】カラム追加時
public function up(): void
{
Schema::table('テーブル名', function (Blueprint $table) {
$table->timestamp('announce_date')->nullable()->after('enable');
});
}●カラムを追加する時はtableメソッドを使用します(Schema::tableの箇所)
●「$table->カラムの型(’カラムの名前’)->after('このカラム名の後に追加')」で追加したいカラムの数だけ定義する(他に条件があればチェーンメソッドで繋ぐことも可)
例えば、以下の場合
$table->timestamp('announce_date')->nullable()->after('enable');
timestamp(日付)型で名前が「announce_date」で、nullを許し、「enable」というカラムの後に追加する、ということになる。
【②downメソッド】カラム追加時
public function down(): void
{
Schema::table('テーブル名', function (Blueprint $table) {
$table->dropColumn('announce_date');
});
}こちらは、①upメソッド(カラム追加)を取り消す(ロールバック)処理になるのでdropColumnメソッド(カラムの削除)を記述する。
カラム修正時
カラムを修正したい場合の①②それぞれのサンプルコードです。
サンプルでは型を変更(date型に変更)します。
【①upメソッド】カラム修正時
public function up(): void
{
Schema::table('messages', function (Blueprint $table) {
$table->date('announce_date')->change();
});
}●カラムを修正する時はtableメソッドを使用します(Schema::tableの箇所)
●「$table->カラムの型(’カラムの名前’)->change()」で変更したいカラムの数だけ定義する(他に条件があればチェーンメソッドで繋ぐことも可)
例えば、以下の場合
$table->date('announce_date')->change();
date(日付)型に変更しています。
この時注意しないといけないのは、他の条件も記述する必要があるということです。
例えば、元々null可のカラムだったとして上記を実行するとnull不可になってしまいます。
その場合は以下を記述するとnull可で型を変更できます。
$table->date('announce_date')->nullable()->change();
【②downメソッド】カラム修正時
public function down(): void
{
Schema::table('messages', function (Blueprint $table) {
$table->元の型('announce_date')->change();
});
}
こちらは、①upメソッド(カラム変更)を取り消す(ロールバック)処理なので元の型や条件を記述します。
【手順3】マイグレーションの実行マイグレーションの実行方法
ターミナル(コマンドプロンプト)で実行します。
「up」メソッドの実行
php artisan migrateデータベースが更新されていますので、データベースを確認します。
もし、意図したものではなかったら取り消しができます(そのための②downメソッドです)
【手順4】ロールバック
もし、意図したものではなかった等、取り消したい場合はターミナルから以下のコードを実行します。
「down」メソッドの実行
php artisan migrate:rollback補足
無事データベースが更新され、新たに別のマイグレーションファイルを作成することになったとします。
「別のマイグレーションファイルを作成しターミナルから実行したら、以前に作成したマイグレーションファイルも実行されるんじゃないの?」と思うかもしれません。
実は、一度実行したマイグレーションファイルは「実行済」としてデータベースにその情報が保存されいるのです。
データベースを開くと「migrations」というテーブルがあるので、レコードを見てみます。

このように実行されたファイル名が「migration」というカラムに保存されています。
ここにあるものは「実行済み」として、ターミナルからmigrateコマンドを実行してももう実行されません。
また、ロールバックで実行されるのは1つ前に実行したmigrateに対してです。
※ファイル名を指定したロールバックもできます。



コメントを残す