概要
マイグレーションによって生成されたテーブルに、新たにカラムを追加する。
テーブルを生成するマイグレーションファイルの前までロールバックしてファイル修正、再マイグレートという方法もあるが、ここでは新たにマイグレーションファイルを作成して追加カラムのみ処理する方法を整理する。
追加前
以下のマイグレーションファイルを準備する。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
<?php use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; class CreateItemsTable extends Migration { public function up() { Schema::create('items', function (Blueprint $table) { $table->bigIncrements('id'); // 商品名 $table->string('name'); // 価格 $table->integer('price'); //$table->timestamps(); $table->datetime('created_at'); $table->datetime('updated_at'); }); } public function down() { Schema::dropIfExists('items'); } } |
マイグレーション実行後に生成されたテーブルの構造は以下のとおり。
1 2 3 4 5 6 7 8 9 10 11 |
mysql> DESCRIBE items; +------------+-----------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +------------+-----------------+------+-----+---------+----------------+ | id | bigint unsigned | NO | PRI | NULL | auto_increment | | name | varchar(255) | NO | | NULL | | | price | int | NO | | NULL | | | created_at | datetime | NO | | NULL | | | updated_at | datetime | NO | | NULL | | +------------+-----------------+------+-----+---------+----------------+ 5 rows in set (0.00 sec) |
追加マイグレーションファイル
以下のコマンドでカラムを追加するためのマイグレーションファイルを新たに作成。
1 2 |
$ php artisan make:migration add_columnd_to_items --table=items Created Migration: 2021_11_10_230552_add_columnd_to_items |
以下の様にファイルを編集。
up()
メソッドで追加するカラムを定義down()
メソッドで追加したカラムを削除する処理を記述
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
<?php use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; class AddColumndToItems extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::table('items', function (Blueprint $table) { // 追加するカラムを定義 $table->string('comment')->default(''); $table->string('image')->default(''); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::table('items', function (Blueprint $table) { // 追加したカラムを削除 $table->dropColumn('comment'); $table->dropColumn('image'); }); } } |
追加マイグレーションの確認
新たに作成したマイグレーションファイルに基づいてマイグレーションを実行。
1 2 3 |
$ php artisan migrate Migrating: 2021_11_10_230552_add_columnd_to_items Migrated: 2021_11_10_230552_add_columnd_to_items (0.03 seconds) |
以下の様に、2つのカラムが追加されている。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
mysql> DESCRIBE items; +------------+-----------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +------------+-----------------+------+-----+---------+----------------+ | id | bigint unsigned | NO | PRI | NULL | auto_increment | | name | varchar(255) | NO | | NULL | | | price | int | NO | | NULL | | | created_at | datetime | NO | | NULL | | | updated_at | datetime | NO | | NULL | | | comment | varchar(255) | NO | | | | | image | varchar(255) | NO | | | | +------------+-----------------+------+-----+---------+----------------+ 7 rows in set (0.00 sec) |
ロールバックの確認
カラムを追加したマイグレーションの1ステップのみロールバック。
1 2 3 |
$ php artisan migrate:rollback --step=1 Rolling back: 2021_11_10_230552_add_columnd_to_items Rolled back: 2021_11_10_230552_add_columnd_to_items (0.08 seconds) |
down()
メソッドにより、追加されたカラムが削除されている。
1 2 3 4 5 6 7 8 9 10 11 |
mysql> DESCRIBE items; +------------+-----------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +------------+-----------------+------+-----+---------+----------------+ | id | bigint unsigned | NO | PRI | NULL | auto_increment | | name | varchar(255) | NO | | NULL | | | price | int | NO | | NULL | | | created_at | datetime | NO | | NULL | | | updated_at | datetime | NO | | NULL | | +------------+-----------------+------+-----+---------+----------------+ 5 rows in set (0.00 sec) |