LoginSignup
90

More than 3 years have passed since last update.

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

Last updated at Posted at 2015-09-27

カラムの変更には事前に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値を許容しないように変更を加えることになります。

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
90