Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
78
Help us understand the problem. What is going on with this article?
@igayamaguchi

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

78
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ikyu
「こころに贅沢を」をコンセプトに一休.com、一休レストランなどのサービスを提供しています。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
78
Help us understand the problem. What is going on with this article?