はじめに
Laravelを学び始めた頃の私は、データベースといえば「phpMyAdminでポチポチ作る」「手動でINSERT文を書く」というやり方しか知りませんでした。
マイグレーション、Seeder…単語自体聞いたことがない…
というより「テーブルや初期データをコマンドで流せる」という発想自体がありませんでした。
こういう“前提を知らない”状態は、初心者のうちは本当によくあると今でも痛感します。
存在を知らないから調べられない。
そもそも「それができる」という世界が頭の中に存在していない。
この記事は、過去の私のようにMySQLに直接データを入れている方に気付いてもらえたらな、という気持ちで書きました。
マイグレーション
マイグレーションとは、データベースの設計をコードで管理する仕組みです。
テーブルの作成やカラムの追加・変更をコマンド一発で行えるので、とても便利です。
まず初めに、下記コマンドを入力することで database/migrations にマイグレーションファイルが生成されます。
※過去記事で解説したsail環境を使っている方は冒頭の php を全て ./sail にしてください
①テーブルの作成
php artisan make:migration create_テーブル名_table --create=テーブル名
②作成されたファイルの中身を編集
public function up(): void
{
Schema::create('テーブル名', function (Blueprint $table) {
$table->id();
$table->timestamps();
});
}
上記の通り、デフォルトではidカラムとcreated_at, updated_at の2つのタイムスタンプが入っています。
ここに、作成したいカラムを入れていきます。
# (例)
public function up(): void
{
Schema::create('テーブル名', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('email')->unique();
$table->string('password');
$table->timestamps();
});
}
③マイグレーションを実行
作成したいカラムを書き込めたら実行(DBに登録)します。
php artisan migrate
これでテーブルが一つ作れました。
「カラムを1つ書き忘れた!」「やっぱり他にも追加したい!」…よくあることですが、
この場合は次の「既存のテーブルにカラムを追加する場合」をご覧ください。
既存のテーブルにカラムを追加する場合
①カラムの追加
php artisan make:migration add_カラム名_to_テーブル名 --table=テーブル名
②作成されたファイルの中身を編集
先ほど作成したテーブルの「name」の後ろに「birth」というカラムを追加する例です。
# (例)
public function up(): void
{
Schema::table('テーブル名', function (Blueprint $table) {
$table->date('birth')->nullable()->after('name');
});
・
public function down(): void
{
Schema::table('テーブル名', function (Blueprint $table) {
$table->dropColumn('birth');
});
}
down()とは?
up() が「変更する」なら、
down() は「元に戻す」ための処理を書く場所です。
マイグレーションを取り消す時に使用できるので書いておくと便利です。
使い方は後述します。
③マイグレーションを実行
追加したいカラムを書き込めたら実行(DBに登録)します。
php artisan migrate
これで該当のテーブルにカラムが追加されました。
今度は今作成したテーブルまたはカラムを削除したい方法を記述します。
マイグレーションファイルを削除・やり直す場合
パターンA:作成しただけ ( php artisan migrate未実行 ) の場合
ファイルを削除するだけでOKです。
パターンB:すでにマイグレーション ( php artisan migrate ) を実行した場合
削除用マイグレーションを作ります。
# テーブルを丸ごと削除する場合
php artisan make:migration drop_テーブル名_table --table=テーブル名
# 特定のカラムのみ削除する場合
php artisan make:migration drop_カラム名_from_テーブル名 --table=テーブル名
ファイルの中身を編集します。
# テーブルを丸ごと削除する場合
public function up(): void
{
Schema::dropIfExists('テーブル名');
}
# 特定のカラムのみ削除する場合
public function up(): void
{
Schema::table('テーブル名', function (Blueprint $table) {
$table->dropColumn('カラム名');
});
}
削除したい内容を書き込めたら実行します。
php artisan migrate
パターンC:最後に実行したマイグレーションだけを元に戻す場合
最後に実行したマイグレーションを取り消す場合に入力してください。
下記を実行すると、直近に実行されたマイグレーションの down() メソッドが実行されて、変更を元に戻すことができます。
php artisan migrate:rollback
パターンD:今まで作成したすべてのマイグレーションを削除し再実行する場合
php artisan migrate:refresh
※中に入っていたデータはすべて削除される点に注意
最後に
本記事ではマイグレーションについて詳しく解説しました。
仮データを登録するための「Seeder」については次の記事でまとめる予定です。
マイグレーションとSeederはセットで使うことが多いので、
Seederの使い方や活用方法についてもぜひそちらをご覧ください。