😽

【Laravel】マイグレーションのあれこれ

2022/03/16に公開

著者:@jnocide_j

この記事を書こうと思った過程

先日、ロールバックしたマイグレーションを元に戻そうとして以下の記事を読みました。
【Laravel】データベースを元に戻す・削除する方法|マイグレーションのロールバックなど

これ通りにやると

すべてのマイグレーションをロールバック後に、マイグレーションを実行

php artisan migrate:refresh

初学者の自分はこの記事を鵜呑みにコマンドを実行してしまい、
開発環境のDBをふっ飛ばしてしまいました。

反省猛省した私はDB操作の際は公式の記事をしっかり読み込んだ上で実行するべきであると改心しました。
あとは二度とこのような悲劇を産まないためにこの記事を書こうと思いました。

マイグレーションファイルのあれこれ

前提としてマイグレーションファイルでは何かカラム削除したいなあ、カラムの順番変更したいなあと思ってもファイルをそのまま編集してはいけません!
削除するなら削除する用のファイル、編集するなら編集用のファイルを作成します。

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

php artisan make:migration [マイグレーションファイル名]

新規作成の場合

php artisan make:migration [マイグレーションファイル名] --create=[テーブル名]

更新の場合

php artisan make:migration [マイグレーションファイル名] --table=[テーブル名]

ファイル名は用途によって分かりやすくします。

新規作成・・・create_◯◯◯_table
更新・・・add_◯◯◯_to_table
→プロジェクトルート以下の database/migrations にファイルが生成されます

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

<?php

use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreatePostsTable extends Migration
{
  public function up()
  {
    // Schemaファサードで posts テーブルの作成
    Schema::create('users', function (Blueprint $table) {

    // カラムを作成していく
    $table->increments('id');
    $table->string('name');
    $table->string('email')->unique();
    $table->string('password');
    $table->rememberToken();
    $table->timestamps();
  }

  public function down()
  {
    // テーブル削除(ロールバック)
    Schema::drop('users');
  }
}

up()にはテーブルやカラムの定義を記述 / down()にはロールバック処理を記述します。

マイグレーション実行

php artisan migrate

→DBにテーブルが追加されます。

テーブルのカラムを削除する

1.マイグレーションファイルを作成(削除する内容編集用のファイル)

php artisan make:migration drop_column_◯◯◯_column --table= ◯◯◯

2.ファイルの中身記述
upは削除処理を記述

public function up()
{
  Schema::table('◯◯', function (Blueprint $table) {
    $table->dropColumn('◯◯');
  });
}

downはカラム追加処理→後にロールバックできるように

public function down()
{
  Schema::table('◯◯', function (Blueprint $table) {
    $table->boolean('◯◯')->default(false);
  });
}

3.マイグレーション実行

ロールバックについて

ロールバックは直前に行った一連のマイグレーションをなかったことにするコマンド。
ロールバックを実施すると、マイグレーションファイルのdown()メソッドに書かれた処理が実行されます。

php artisan migrate:rollback

◎マイグレーションテーブルの結果を表示するコマンド(ロールバックできているか確認)

php artisan migrate:status

宣伝

パーソンリンクではエンジニアを募集しています!
https://www.person-link.co.jp/recruit

Discussion