この記事にはプロモーションが含まれています。

【Laravel】データベーステーブルのカラムタイプを変更する方法【マイグレーション】

【Laravel】データベーステーブルのカラムタイプを変更する方法【マイグレーション】

この記事では

Laravelでデータベーステーブルのカラムタイプを変更する方法

をご紹介します。

検証はLaravel11で実施しました。

Laravelではマイグレーションを実行することでデータベーステーブルを作成します。

その際、マイグレーションファイルにテーブル構造を記述しますが、「うっかりカラムタイプを誤って指定しまった!」ということもあるかもしれません。

データベースへテストデータなどを追加する前であれば、

ロールバック→マイグレーションファイル修正→再度マイグレーション実行

という流れも取れます。

しかし、もしもカラムタイプの指定が誤っていることに気が付いたのがもっと後のタイミングだった場合、単にロールバックするだけでは何かと面倒だということもあるかもしれません。

ケケンタ

今回ご紹介するのはそんなときにご活用いただける方法です!




ケケンタ

ケケンタのITブログでは、WebアプリPHPLaravel)やWeb制作WordPressコーディング)について情報を発信しています。
学習中の方や実務をされている方など多くの方にアクセスいただいていますので、ぜひほかの記事も参考にしてみてください!


運動不足、気になっていませんか?

もしプログラミング学習やお仕事で運動不足が気になっているなら
連続屈伸運動がおすすめです!

ボタンにカーソルを合わせるだけ
カウントダウンが始まるタイマーをご用意してみました!

ケケンタ

無理のない範囲で、ぜひ隙間時間に屈伸運動を取り入れてみて下さい!

タイマースタート

3:00

※運動不足だと連続3分で取り組んでもかなり息が切れます
(僕は加えて気分もちょっと悪くなりました……)
絶対にご無理の無い範囲でお取り組みください!


目次

【解説】Laravelでデータベースのカラムタイプを変更する方法

STEP1 マイグレーションファイルを作成する

まずは以下のコマンドでマイグレーションファイルを作成しましょう。

php artisan make:migration change_posts_table_title_column_type

「change_posts_table_title_column_type」の部分の名前は任意です。(分かりやすい名前を推奨)

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

続いて、作成されたマイグレーションファイルを編集していきます。

今回はpostsテーブルのtitleカラムのカラムタイプをstringで指定すべきところ、「うっかり」integerで指定してしまった状況を想定しています。

<?php

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

return new class extends Migration
{
    /**
     * マイグレーション実行時に動く処理
     */
    public function up(): void
    {
        Schema::table('posts', function (Blueprint $table) {
            $table->string('title')->change();
        });
    }

    /**
     * ロールバック実行時に動く処理
     */
    public function down(): void
    {
        Schema::table('posts', function (Blueprint $table) {
            $table->integer('title')->change();
        });
    }
};

主な編集個所はup()関数とdown()関数の2つです。

Laravelにはchange()関数が用意されており、以下のように記述することでカラムタイプを変更することが可能です。

$table->string('title')->change();

カラムタイプ以外にオプション(修飾子)を指定している場合は明示的な記述が必要です。
詳しくは「【補足】カラムにオプション(修飾子)を指定している場合」をご覧ください。

また、down()関数にも以下の処理を記述しています。

down()関数

$table->integer('title')->change();

down()関数はロールバック実行時に動く関数です。

ここに記述するのは、簡単に言えばup()関数で実行させる処理と逆の処理です。
※今回はinteger指定をstring指定へ修正しているため、down()関数の方には、その反対の処理を記述しています。

down()はマイグレーション実行時には動きませんが、ロールバックするときに正しく処理が書かれていないとエラーが発生するためご注意ください。

STEP3 マイグレーションを実行する

マイグレーションファイルが編集できたら以下のコマンドでマイグレーションを実行しましょう。

php artisan migrate

STEP4 カラムタイプが変更されていることを確認する

最後に、本当にカラムタイプが変更されたかどうかを確認してみましょう。

この記事ではSQLite3での確認方法をご紹介します。

STEP
SQLite3をCLIで起動する

Laravelプロジェクトディレクトリの直下で以下のコマンドを実行することでSQLite3をCLIで起動することができます。

sqlite3 .\database\database.sqlite
SQLite3のCLI起動後
SQLite3のCLI起動後
STEP
テーブル構造を確認する

SQLite3で特定のテーブル構造を確認するときは以下のコマンドを実行します。

PRAGMA table_info('posts');
STEP
SQLite3を終了する

SQLite3のCLIモードを終了するときは以下のコマンドを実行します。

.quit

末尾に「;」を付けるとエラーになるのでご注意ください。

ケケンタ

以上がLaravel11でデータベーステーブルのカラムタイプを変更する方法です!

【補足】カラムにオプション(修飾子)を指定している場合

もし変更対象のカラムに何らかのオプション(修飾子)を指定していた場合は、change()を実行するときにそれらのオプション(修飾子)を明示的に指定する必要があります。

以下は「posts」テーブルの「nice_num(いいね数)」カラムにオプション(修飾子)が設定されていた場合の記述例です。

Schema::table('posts', function (Blueprint $table) {
    // 誤ってデフォルト値を「1」にしてしまっていたため、
    // $table->integer('nice_num')->unsigned()->default(1)->comment('post nice number') // ←元々のカラム設定
    
    // 「0」へ変更したい
    $table->integer('nice_num')->unsigned()->default(0)->comment('post nice number')->change();
});
ケケンタ

change()関数は簡単にカラムタイプを変更することが可能ですが、元々のオプション(修飾子)情報は保持してくれないようです!

まとめ

以上が、Laravelでデータベーステーブルのカラムタイプを変更する方法でした!

人為的ミスや仕様変更などにより、カラムタイプを変更しなくてはならないこともあるかと思います。

そんなときは「change()関数が使える」ということを覚えておくと、必要な情報をパッと調べられるかと思います。

ケケンタ

それでは最後までご覧いただきありがとうございました!

当ブログではLaravelやPHPなどに関する情報を発信しています。

ご興味のある方はほかの記事もご覧いただけるとうれしいです!

データベーステーブルのカラムタイプを変更する方法【マイグレーション】のアイキャッチ画像

この記事が気に入ったら
フォローしてね!

この記事が良いと思ったらシェアしてね!

コメント

コメントする

CAPTCHA


目次