テーブルのカラムに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