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()
メソッドにスキーマを記述していきます。
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メソッドも記述していきます。
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
になっていることが確認できると思います。
以上、最後までお読みいただきありがとうございました〜。