7
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Laravel】既存テーブルにカラムを追加する

Last updated at Posted at 2023-02-14

はじめに

今回は、Laravelのマイグレーション機能を利用し、既存テーブルにカラムを追加する過程で、調べたことをまとめました。

※おことわり※
基本的に学習内容のアウトプットです。
初学者であるため、間違い等あればご指摘いただけますと嬉しいです。

この記事の目的

以下内容についてアウトプット

  • Artisan make:migrationコマンド
  • マイグレーション機能
  • カラムのデータ型

この記事の内容

  1. マイグレーションファイルの作成
  2. テーブルの定義
  3. マイグレーションを実行
  4. 参考 カラムのデータ型
  5. 参考 Artisan make:migrationコマンド
  6. 参考 その他処理
  7. 参考 関連記事

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

Artisan make:migrationコマンドを使用して、マイグレーションファイルを作成します。

// 構文
php artisan make:migration 任意のマイグレーション名 --table=テーブル名

// 例 userテーブルにカラムを2つ追加
php artisan make:migration add_user_table_2columns  --table=user

Tips :

  • マイグレーション名は任意
    ※クラス名と被るとエラーになる

  • 既存のテーブルに変更を加える場合、 --tableオプション でテーブル名を指定する

2. テーブルの定義

先程作成したマイグレーションファイルに、テーブルの定義を行います。

<?php

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

return new class extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        // 追加したいカラムを定義
        Schema::table('追加先のテーブル名', function (Blueprint $table) {
            $table->カラムのデータ型('新規カラム名')->comment('コメント')->after('既存カラム名');          // 構文
            $table->timestamp('rest_password_expire_data')->nullable()->comment('パスワード再設定キーの有効期限');     // 例
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::table('user_m', function (Blueprint $table) {
            $table->dropColumn('上記で追加したカラム');          // 構文
            $table->dropColumn('rest_password_expire_data');     // 例
        });
    }
};

Tips :

  • マイグレーションファイルには、カラムの名前・データ型・制約などを定義する

  • up() :追加したいカラムを定義する

  • down() :上記の処理を巻き戻す処理を記述

  • after() :カラムの順番を整理する
    ※指定した既存カラムの後に、新規で作成するカラムが入る

  • TIMESTAMP型のカラムを追加する場合、 nullable()メソッド を使ってnull許容にする必要がある
    ※nullを許容しないとエラーいなる

  • comment() :DBのカラムに任意のコメントをつける

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

下記コマンドで、マイグレーションを実行します。

// 構文
php artisan migrate

4. 参考 カラムのデータ型

カラムのデータ型について、よく使うものをまとめました。

データ型 説明 備考
char('カラム名', 長さ) 長さ指定の文字型
string('カラム名') VARCHAR型 デフォルト255文字
string('カラム名', 長さ) 長さ指定のVARCHAR型
text('カラム名') TEXT型 最大長 65535文字
TINYINT('カラム名') 数値型 1バイト(範囲 -128〜127)
SMALLINT('カラム名') 数値型 2バイト(範囲 -32768〜32767)
MEDIUMINT('カラム名') 数値型 3バイト(範囲 -8388608〜8388607)
integer('カラム名') 数値型 4バイト(範囲 -2147483647〜2147483647)
BIGINT('カラム名') 数値型 8バイト(範囲 -9223372036854775808〜9223372036854775807)
double('カラム名', 合計桁数, 小数桁数) 浮動小数点型
enum('カラム名', ['定数', '定数']) ENUM型
date('カラム名') 日付型
time('カラム名') 時間型
dateTime(カラム名) 日時型
timestamp('カラム名') TIMESTAMP型 not null制約が適用
timestamps() created_atとupdate_atカラム
nullableTimestamps() NULL値を許す以外、timestamps()と同じ
boolean('カラム名') 真偽値 フラグ関係のカラム
increments('id') 「符号なしINT」を使用した自動増分ID(主キー)
json('カラム名') JSON型
binary('カラム名') バイナリデータ型

5. 参考 Artisan make:migrationコマンド

  • php artisan migrate
    未処理のマイグレーションをすべて実行する

  • php artisan migrate:status
    どのマイグレーションが実行されているかを確認する

  • php artisan migrate:rollback
    マイグレーション操作をロールバックする

  • php artisan migrate:rollback --step=ステップ数
    直近からステップ数分、マイグレーション操作をロールバックする

6. 参考 その他処理

既存のマイグレーションファイルを編集したい場合

例)カラム名の修正や、制約の追加など

① 該当のマイグレーションファイルをロールバックする
念のため、正しくロールバックできているかステータスを確認する

// どちらかのコマンドを実行する
php artisan migrate:rollback
php artisan migrate:rollback --step=ステップ数

// ステータス確認
php artisan migrate:status

② マイグレーションファイルを編集する
③ マイグレートを行う

php artisan migrate

既存のカラム名を修正したい場合

例)userテーブルの name カラムを student_name に変更したい

① 以下コマンドを実行し、マイグレーションファイルを作成する

// 構文
php artisan make:migration 任意のマイグレーション名

// 例
php artisan make:migration rename_column_user_table

② マイグレーションファイルを編集する

// 省略

public function up()
    {
        Schema::table('修正先のテーブル名', function (Blueprint $table) {
            $table->renameColumn('現在のカラム名', '修正後のカラム名');
            $table->renameColumn('name', 'student_name');
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::table('修正先のテーブル名', function (Blueprint $table) {
            $table->renameColumn('修正後のカラム名', '現在のカラム名');
            $table->renameColumn('student_name', 'name');
        });
    }
}

③ マイグレートを行う

php artisan migrate

7. 参考 関連記事

7
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?