LaravelのMigrateでカラムにNULLを許容したり許容しなかったり変更

カラムの変更には事前にdoctrine/dbalが必要なのでインストール

$ composer require doctrine/dbal

テーブル名bookのmigrationを作成

$ php artisan make:migration --table book change_book_table
Created Migration: 2015_09_28_001116_change_book_table

作成されたファイルを編集し、up()にカラムの変更処理と、down()にその変更を取り消す処理を追加します。

2015_09_28_001116_change_book_table.php
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class ChangeBookTable extends Migration
{
    public function up()
    {
        Schema::table('book', function (Blueprint $table) {
            // noteカラムにNULLを許容
            $table->text('note')->nullable()->change();
        });
    }

    public function down()
    {
        Schema::table('book', function (Blueprint $table) {
            // 既にテーブルの対象カラムにNULLを登録しているならば必要
            // DB::statement('UPDATE `book` SET `note` = "" WHERE `note` IS NULL');

            // noteカラムにNULLを許容しない
            // 5.5以降?
                        $table->text('note')->nullable(false)->change();

            // 5.5以前?
            DB::statement('ALTER TABLE `book` MODIFY `note` TEXT NOT NULL;');
        });
    }
}

nullable()でカラムにNULL値を許容し、change()で変更を実行します。
それをNULLを許容しない形にするにはnullableの引数にfalseを記載してあげればいいです。
Laravel 5.5のドキュメントからnullableに値を設定できるような記載が追加されました。
これにより、以前のようなクエリを書かなくて済むようです。

5.5以前で使えない場合、Laravelのスキーマビルダーには存在しないようなのでSQLを直に書いてNULL値を許容しないように変更を加えることになります。

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.