0
0

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でテーブルのカラムを後からNULLを許可したいんですけどっ!??

Last updated at Posted at 2022-06-23

テーブルのカラムにNULLが入ってもOKにする

カラムを後からnullableに変更する方法を紹介するZE☆

Laravelドキュメントのマイグレーション内を分かりやすく噛み砕いたものやで👍

俺「nullableってなんやねん」

って人はこちらを参照↓

カラムにNULLが入ってもOKするよ🙆‍♂️

解説するLaravelドキュメントはバージョン8.xです。

めちゃ簡単なmigrationのおさらい

簡単にmigrationについておさらいするよ!

  • migrationの生成コマンド
# create_flights_table部分はよしなに
php artisan make:migrate create_flights_table
  • migrationの実行コマンド
php artisan migrate

簡単に言うと、既存のカラムをnullableに変更するためのmigrationファイルを生成して、nullableに変更するコードを書いたら、そのmigrationを実行するだけ👍

テーブルの更新

Schemaファサードのtableメソッドを使うことで既存のテーブルを更新できるよ!

以下がカラムの設定を更新するときのmigrationファイルの例だよ!

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

Schema::table('users', function (Blueprint $table) { // この行の先頭がSchemaのtableメソッドになってる!
    $table->integer('votes');
});

テーブルを作成するときはSchemaファサードのcreateメソッドを使ってるんだよね。

テーブルを更新するときはtableメソッドを使おうね👍

※以下、テーブルを作成するとき(createメソッドを使っているとき)の例

// これはテーブルを新規に作成するときのメソッドやで
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

Schema::create('flights', function (Blueprint $table) { // テーブルの作成のときはSchemaのcreateメソッド
    $table->id();
    $table->strint('name');
});

カラム属性の更新

すでに設定済みのカラムについて変更したいときはchangeメソッドを使おう!

例えば文字列を格納できるstringカラムのサイズを大きくしたいとしよう。

stringカラムは第一引数にカラム名、第二引数にサイズを指定する。

stringでできているnameカラムのサイズを25から50に後から変更したいときはmigrationにこんなふうに書こう!

Schema::table('users', function (Blueprint $table) {
    $table->string('name', 50)->change(); // 最後にchange()を忘れないでね!
});

すでにnameカラムがあるとき、そのサイズが50になるようにchangeしているよ!

nullableにも変更しちゃおう!

  • カラムを変更する方法(=changeメソッドを使う)を学んだ
  • LaravelでカラムにNULLが入ってもOKな方法(=nullableメソッドを使う)も知ってる

両方を同時に行うことで、カラムを後からnullableに変更できるでっ!

さっきのnameカラムのサイズを25から50に大きくして、かつnullableに変更するのは以下。

Schema::table('users', function (Blueprint $table) {
    $table->string('name', 50)->nullable()->change(); // nullableに後から変更してるよ!
});

もちろんstringカラムのサイズ変更がないんだったら、シンプルに$table->string('name')->nullable()->change();とすればnameカラムがnullableになるだけ👍

最後の大仕事(doctrine/dbal)

カラムを変更するmigrationファイルを作成したので、あとはphp artisan migrateで実行するだけです!

かと思いきや実はまだ足りない作業が1つあります。

doctrine/dbalというパッケージをインストールしないといけません。

過去に1度でもインストールしていればOKです!

※この記事を読んでいるということは、恐らくdoctrine/dbalをインストール済みではないかと予想しますが(笑)。

doctrine/dbalのインストールするコマンドはこちらです!

これをシェル(ターミナルやコマンドプロンプトなど)で実行してみてください!

composer require doctrine/dbal

やっと変更できる😉

これでdoctrine/dbalもインストールされたので、php artisan migrateを実行するとカラムがnullableに後から変更できます👍

お詫び

これまで一度作成したカラムを後から変更する方法をご紹介してきましたが、実は後から変更できるカラムは以下の種類しかできないと決まっています。

下記のカラム以外を変更しようとされていた方、全能感を演出して申し訳ないです汗

直接SQLを実行するなど、別の方法を検討しましょう。

  • bigInteger
  • binary
  • boolean
  • date
  • dateTime
  • dateTimeTz
  • decimal
  • integer
  • json
  • longText
  • mediumText
  • smallInteger
  • string
  • text
  • time
  • unsignedBigInteger
  • unsignedInteger
  • unsignedSmallInteger
  • uuid
0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?