この記事では
Laravelでデータベーステーブルのカラムタイプを変更する方法
をご紹介します。
Laravelではマイグレーションを実行することでデータベーステーブルを作成します。
その際、マイグレーションファイルにテーブル構造を記述しますが、「うっかりカラムタイプを誤って指定しまった!」ということもあるかもしれません。
データベースへテストデータなどを追加する前であれば、
ロールバック→マイグレーションファイル修正→再度マイグレーション実行
という流れも取れます。
しかし、もしもカラムタイプの指定が誤っていることに気が付いたのがもっと後のタイミングだった場合、単にロールバックするだけでは何かと面倒だということもあるかもしれません。
今回ご紹介するのはそんなときにご活用いただける方法です!
【解説】Laravelでデータベースのカラムタイプを変更する方法
STEP1 マイグレーションファイルを作成する
まずは以下のコマンドでマイグレーションファイルを作成しましょう。
php artisan make:migration change_posts_table_title_column_type
STEP2 マイグレーションファイルを編集する
続いて、作成されたマイグレーションファイルを編集していきます。
<?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での確認方法をご紹介します。
Laravelプロジェクトディレクトリの直下で以下のコマンドを実行することでSQLite3をCLIで起動することができます。
sqlite3 .\database\database.sqlite
SQLite3で特定のテーブル構造を確認するときは以下のコマンドを実行します。
PRAGMA table_info('posts');
SQLite3のCLIモードを終了するときは以下のコマンドを実行します。
.quit
以上がLaravel11でデータベーステーブルのカラムタイプを変更する方法です!
【補足】カラムにオプション(修飾子)を指定している場合
以下は「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などに関する情報を発信しています。
ご興味のある方はほかの記事もご覧いただけるとうれしいです!
コメント