2024.04.29
【Laravel】DB操作(マイグレーション)

Image by G.C. from Pixabay

マイグレーションファイルの作成

■新規テーブルの作成時

php artisan make:migration create_テーブル名_table --create=テーブル名
 例)php artisan make:migration create_posts_table --create=posts

※「/database/migrations」にマイグレーションファイルが作成されます。

■既存テーブルの更新時

php artisan make:migration ファイル名 --table=テーブル名
 例)php artisan make:migration add_userid_to_posts_table --table=posts

 

■補足:マイグレーションファイルと一緒にモデル、コントローラも作成するなら以下コマンドが便利です。

php artisan make:model モデル名 -mc
 例)php artisan make:model Post -mc

マイグレーションファイルの編集

その前に:upメソッドとdownメソッドとは

マイグレーションファイルにはupメソッドとdownメソッドがありますが、機能は以下です。

●upメソッド:migration時に実行される

●downメソッド:rollback時に実行される

DBの更新内容はupメソッドに記述します。
また、rollbackできるようにupメソッドでの更新内容と逆の内容をdownメソッドに記述します。

詳細については以下の記事にまとめたので、気になる方はご参照ください。

テーブルの作成&削除

■テーブル作成:upメソッドに書く内容

public function up(): void
{                 // ↓テーブル名
   Schema::create('posts'), function(Blueprint $table{
        $table->id();
        $table->bigInteger('user_id');
        $table->string('title', 100);
        $table->text('content');
        $table->timestamps();

        // 外部参照設定 
        // $table->foreign('自テーブルのカラム')->reference(参照先column)->on(参照先table)
        $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
    }
}

 

■テーブル削除:downメソッドに書く内容

public function down(): void
{
        //Schema::dropIfExists('テーブル名');
        Schema::dropIfExists('posts');
}

 

カラムの編集

■upメソッドに書く内容

public function up(): void
{
    Schema::table('テーブル名', function (Blueprint $table) {

        // カラム追加   ※$table->データ型('カラム名')->after('追加場所の指定');
        $table->integer('status')->after('content');

        // カラム名変更 ※$table->renameColumn('変更前', '変更後');
        $table->renameColumn('name', 'post_name')
    
        // データ型の変更 ※$table->変更後データ型('対象カラム名')->change();
        $table->text('content')->change();
    
        // nullを「許可する」に変更
        $table->integer('status')->nullable()->change();
    });
}

■downメソッドに書く内容

downメソッドにはupメソッドに記述した内容と逆の処理を書き込みます。
(「upメソッドでカラムを追加したら、downメソッドで削除する処理を書く」など)

public function down(): void
{
    // カラム削除
    $table->dropColumn('status');

    // カラム名を戻す
    $table->renameColumn('post_name', 'name');

    // データ型を戻す
    $table->string('content')->change();

    // null許可を戻す(nullを不許可にする書き方)
    $table->integer('status')->nullable(false)->change();
}

カラムのデータ型一覧 ※主なもののみ

データ型内容
$table->increments(’カラム名’);整数型。オートインクリメント
$table->integer(‘カラム名’)整数型(32ビット)
$table->bigInteger(‘カラム名’)整数型(64ビット符号あり)
$table->unsignedBigInteger(‘カラム名’)整数型(64ビット符号なし)
$table->boolean(‘カラム名’)真偽値(true,false)
$table->string(‘カラム名’, 文字数)文字数を指定する文字列型
$table->text(‘カラム名’)文字数を指定しない文字列型
$table->json(‘カラム名’)JSON型

オプション

以下のような、各カラムのオプションの内よく使うものを表にしています。

$table->integer('note')->nullable();    // ⇐nullを許可する

 

データ型内容
default(‘デフォルト値’);データ作成時のデフォルト値
nullable(true);nullを許可する
nullable(false);nullを許可しない

マイグレーションコマンド

■マイグレーション実行

php artisan migrate

■マイグレーションの状態確認

php artisan migrate:status

ステータスは実行済みなら「Ran」実行してなければ「Pending」と表示されます。

例)
 Migration name …………………………… Batch / Status
 0001_01_01_000000_create_users_table …………………… [1] Ran
 0001_01_01_000001_add_column_to_users_table ………[2] Ran
 0001_01_01_000002_create_cache_table …………………… Pending

※[ ]内の数字は実行された順番です。

■ロールバック

【直前に実行したマイグレーションをロールバック】

php artisan migrate:rollback

【全てロールバック】

php artisan migrate:reset

■マイグレーションを全てロールバックしてから、再度全てのマイグレーションを実行する

php artisan migrate:refresh

※マイグレーションを使わず手動で作成したテーブルには影響なし。

■全てのテーブルを削除してから、全てのマイグレーションを実行する

php artisan migrate:fresh

※注意※
 マイグレーションを使わず手動で作成したテーブルは削除されてしまいます。

 

マイグレーションに関しては以上です。

 

シーディングに関しても以下でまとめています。