はじめに
Laravel sailでmigrateを行うケースについて簡単にまとめました。
sail環境以外でも、以下のコマンドのsail
をphp
に読み替えてもらうと同様に動くと思います。
この記事は「Laravelの教科書 (加藤じゅんこ)」の内容を一部参考にさせていただきました。
新規テーブル作成時
①マイグレーションファイルを作成
マイグレーションファイルとモデルを同時に新規作成
$ sail artisan make:model <モデル名> -m
マイグレーションファイルのみ新規作成する場合はこちら
$ sail artisan make:migration マイグレーションファイル名
②作成したマイグレーションファイルを編集
database\migrations内に作成されたマイグレーションファイルを開いて編集する
- upメソッドにはマイグレート実行時に行うことを、downメソッドにはマイグレートを取り消してロールバックする時に行うことを記述する
- テーブル新規作成時はdownメソッドが自動入力されているので、通常はupメソッドを編集するだけで良い
- カラムを追加する場合は
$table->データ型('カラム名')->カラム修飾子
の構文で記述する (データ型とカラム修飾子については後述)
サンプルコード (examplesテーブルを作成)
2024_08_11_194424_create_examples_table.php
<?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::create('examples', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('email')->unique();
$table->timestamp('email_verified_at')->nullable();
$table->string('password');
$table->rememberToken();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('examples');
}
};
③マイグレート実行
$ sail artisan migrate
- データベース内のmigrationsテーブルにマイグレートの実行記録が残る
- maigrationsテーブルのbatchカラムには何回目にマイグレートが行われたかが表示されている
- 後述するロールバックコマンドによって、batchごとにまとめてマイグレートを取り消すことができる
既存テーブル編集時
①テーブルに紐づいたマイグレーションファイルを作成
$ sail artisan make:migration <マイグレーションファイル名> --table=<編集するテーブル名>
②作成したマイグレーションファイルを編集
カラム追加時
- upメソッドにカラムを追加する処理を、downメソッドにカラムを削除する処理を記述する
- カラム削除にはdropColumnメソッドを使用する
サンプルコード (examplesテーブルにtest行を追加)
2024_08_11_195920_add_test_column.php
<?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('examples', function (Blueprint $table) {
$table->string('test')->after('email');
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::table('examples', function (Blueprint $table) {
$table->dropColumn('test');
});
}
};
カラム削除時
- upメソッドにカラムを削除する処理を、downメソッドに削除をやり直す処理を記述する
サンプルコード (examplesテーブルからtest行を削除)
2024_08_11_200411_delete_test_column.php
<?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('examples', function (Blueprint $table) {
$table->dropColumn('test');
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::table('examples', function (Blueprint $table) {
$table->string('test')->after('email');
});
}
};
カラム名変更時
- renameColumnメソッドを使用する
- このメソッドは第一引数のカラム名を第二引数の名称に変更する働きを持つ
サンプルコード (テストカラムの名称を変更する)
2024_08_11_201948_change_test_column_name.php
<?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('examples', function (Blueprint $table) {
$table->renameColumn('test', 'try');
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::table('examples', function (Blueprint $table) {
$table->renameColumn('try', 'test');
});
}
};
カラムのデータ型変更時
- changeメソッドを使用する
サンプルコード (テストカラムのデータ型を変更する)
2024_08_11_203551_change_test_column_type.php
<?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('examples', function (Blueprint $table) {
$table->text('test')->change();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::table('examples', function (Blueprint $table) {
$table->string('test')->change();
});
}
};
③マイグレート実行
$ sail artisan migrate
ロールバック
$ sail artisan migrate:rolllback
- batchごとにまとめてマイグレートを取り消す
- ロールバックによって消えたテーブルやカラムのデータも消えることに注意
マイグレーションファイルで使う主なデータ型
データ型 | DB内表記 | 詳細 |
---|---|---|
integer | INTEGER | 整数 |
string | VARCHER | 短めの文字列 (約255文字まで) |
text | TEXT | 長めの文字列 (約16,384文字まで) |
foreignId | 外部キー | |
boolean | BOOLEAN | true/false |
date | DATE | 日付 |
datetime | DATETIME | 日付・時刻 |
マイグレーションファイルで使う主なカラム修飾子
修飾子 | 詳細 |
---|---|
nullable() | NULL値を許容 |
after('カラム名') | 指定したカラムの後に配置 |
default('値') | 初期値を設定 |
unique() | 重複値を認めない |
おわりに
今後の学習で、役立ちそうなことを見つけた場合は記事を更新していく予定です。