18
9

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 3 years have passed since last update.

【Laravel】マイグレーションで既存のカラムをnullableに変更する

Last updated at Posted at 2021-07-02

Migrationファイルを用いて、既存のテーブルのカラムにnullable属性を付与する方法を整理してメモ。

状況

  • 既存の申し込みフォームにおいて、必須項目だったものが任意入力項目になった。
  • DB(今回はMySQLを使用)のカラムはnullを許可しない設定になっていたため、このままではエラーになる。
  • そのため、当該カラムをMigrationを用いてnullableに変更したい。

まずは下準備

動作要件として、Laravel公式より..

カラムを変更する前に、composer.jsonファイルでdoctrine/dbalを確実に追加してください。Doctrine DBALライブラリーは現在のカラムの状態を決め、必要な調整を行うSQLクエリを生成するために、使用しています。

ということで、doctrine/dbalライブラリーを導入しておきます。
(すでに導入してあればcomposer.lockなどを確認しておけばOK)

$ composer require doctrine/dbal

Migrationファイルの作成

ではさっそくMigrationファイルを作成していきます。
今回の例ではcustomersというテーブルのcompany_nameカラムをnullableに変更していきます。

$ php artisan make:migration change_company_name_to_nullable --table=customers

こんな感じで作成。(名前はもうちょっと良い感じにできるかもですが)

upメソッドの記述

マイグレーションファイルを作成したら、まずはup()メソッドにスキーマを記述していきます。

xxx_change_company_name_to_nullable.php
public function up()
{
    Schema::table('customers', function (Blueprint $table) {
        $table->string('company_name')->nullable(true)->change();
    });
}

こんな感じで記述します。
まず、string('カラム名')の部分は既存のカラム名とデータ型に合わせます。
そしてnullable()で引数にtrueを指定し、change()とすると既存のカラムを変更できます。
(この引数のtrueは省略できるかもしれないけど明示的にtrueと指定すると分かりやすいと思います)

downメソッドの記述

次に、rollbackで必要なdownメソッドも記述していきます。

xxx_change_company_name_to_nullable.php
public function down()
{
    Schema::table('customers', function (Blueprint $table) {
        $table->string('company_name')->nullable(false)->change();
    });
}

内容はupメソッドとほとんど同じですが、こちらはnullable()の引数はfalseとします。
(引数を省略するとrollback実行してもnullableになったまま戻らないので留意)

Migrate実行

あとは説明不要で、普通に

$ php artisan migrate

を実行すればOKです。
これでクライアントツールやターミナルで、指定のカラムがnullableになっていることが確認できると思います。


以上、最後までお読みいただきありがとうございました〜。

18
9
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
18
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?