【Laravel】マイグレーションファイルの書き方とコマンドまとめ
~簡単な自己紹介~
- 嫁と猫3匹と暮らすフルリモートの三十路SE
- 投資・節約・副業で資産形成中
- 現在の金融資産は約1,750万円、めざせアッパーマス層(資産3,000万円)
Laravelのマイグレーションファイルの書き方、コマンドなどをメモしていきます。
テーブルの定義
up
Schema::create('table_name', function (Blueprint $table) {
// ここのカラムやインデックスを書いていく
});
down
Schema::dropIfExists('table_name');
カラムのデータ型の定義
様々なデータ型がありますので、よく使う型だけご紹介します。
文字列型
varchar型
長さが未指定の場合、長さは255になります。
$table->string("column_name");
長さを指定する場合は下記のように記載します。(例:長さ=30)
$table->string("column_name", 30);
整数型
int型
$table->integer("column_name");
int型(Auto Increment)
このデータ型のカラムが自動的に主キーになります。
$table->increments("column_name");
tinyint型
0/1、true/falseなどのフラグ系もtinyint型を使います。
$table->tinyInteger("column_name");
下記の記載でも同じになります。
$table->boolean("column_name");
日付・時刻型
date型
$table->date("column_name");
time型
$table->time("column_name");
datetime型
$table->dateTime("column_name");
その他データ型
json型
$table->json("column_name");
その他の定義・制約など
コメント
テーブルの論理名を設定するなどができます。
$table->string("column_name")->comment("コメント");
デフォルト値
$table->string("column_name")->default("デフォルト値");
NOT NULL制約
NULLを許可する場合
$table->string("column_name")->nullable(true);
NULLを許可しない場合(デフォルトではこちら)
$table->string("column_name")->nullable(false);
ユニーク制約
カラムの後ろにユニーク制約を付ける(単一カラム)
$table->string("column_name")->unique();
ユニーク制約に名前を付けることもできます。
下記の場合、unique_nameという名前で制約が作られます。
$table->string("column_name")->unique("unique_name");
カラムとは別にユニーク制約を付ける(単一カラム)
$table->unique("column_name");
ユニーク制約に名前を付けることもできます。
下記の場合、unique_nameという名前で制約が作られます。
$table->unique("column_name", "unique_name");
カラムとは別にユニーク制約を付ける(複数カラム)
複数カラムのユニーク制約は配列形式でカラムを指定します。
$table->unique(["column_name_1", "column_name_2"]);
ユニーク制約に名前を付けることもできます。
下記の場合、unique_nameという名前で制約が作られます。
$table->unique(["column_name_1", "column_name_2"], "unique_name");
単数であっても配列形式でカラムを指定できますので、個人的には常に配列形式で指定しておくのが無難な気がします。
コマンド
マイグレーションファイル作成
php artisan make:migration xxxxx
マイグレーションの実行状況を確認
php artisan migrate:status
マイグレーション実行
php artisan migrate
マイグレーション実行(テーブル全削除してから)
php artisan migrate:fresh
マイグレーション実行(全部ロールバックしてから)
php artisan migrate:refresh
マイグレーション実行(1ファイルのみ)
マイグレーションファイルは1度実行してしまうと、そのあと編集してもすでに実行済みという扱いになり、更新ができません。
そこで、1度ロールバックしてから特定のファイルだけ再実行してあげると、疑似的に差分実行のようなことができます。
(データは消えます)
php artisan migrate:refresh --step=1 --path=/database/migrations/Xxxxx.php
以上です。
お疲れさまでした。