マイグレーションの機能でテーブルの作成、編集をおこないます。
まずマイグレーションの機能でテーブルを作成します。なおあらかじめMySQLに接続しデータベースを用意して下さい。
マイグレーションファイルを作成します。
1 |
$ php artisan make:migration create_books_table |
「create_○○○_table」は生成されるマイグレーションファイル名の一部となりますが、○○○の部分には作成するテーブル名を指定します。下記のように–createオプションにテーブル名を指定しても同じです。
1 |
$ php artisan make:migration create_table --create=books |
database/migrations/ディレクトリ以下にタイムスタンプ付きのファイルが生成されるので編集します。ハイライト部分が追記部分です。
なおすでにデフォルトで2つのマイグレーションファイルが生成されています。
・2014_10_12_000000_create_users_table.php
・2014_10_12_100000_create_password_resets_table.php
2020_01_16_005247_create_books_table.php
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 |
<?php use Illuminate\Support\Facades\Schema; use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; class CreateBooksTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('books', function (Blueprint $table) { $table->bigIncrements('id'); $table->string('title'); $table->string('author'); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('books'); } } |
up()にはマイグレーション実行時の処理を記述します。またdown()には後に説明しますが、ロールバック実行時の処理、基本的にup()と逆の処理を記述します。create_○○○_tableおよび–createオプションでマイグレーションファイルを作成した場合は、すでにテーブルを削除する処理が記述されています。
マイグレーションを実行します。
1 |
$ php artisan migrate |
完了するとbooksテーブルが生成されているのが確認できます。
1 2 3 4 5 6 7 8 9 10 |
mysql> SHOW COLUMNS FROM books; +------------+---------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +------------+---------------------+------+-----+---------+----------------+ | id | bigint(20) unsigned | NO | PRI | NULL | auto_increment | | title | varchar(255) | NO | | NULL | | | author | varchar(255) | NO | | NULL | | | created_at | timestamp | YES | | NULL | | | updated_at | timestamp | YES | | NULL | | +------------+---------------------+------+-----+---------+----------------+ |
テーブルの変更
カラムの追加や編集をする場合は、上記で作成したマイグレーションファイルを編集し、refreshを付けて再度マイグレーションを実行します。
例えばpublisherカラムを追加
1 2 3 4 5 6 7 |
Schema::create('books', function (Blueprint $table) { $table->bigIncrements('id'); $table->string('title'); $table->string('author'); $table->string('publisher'); $table->timestamps(); }); |
refreshを付加してマイグレーション実行
1 |
$ php artisan migrate:refresh |
※migrate:refreshは、migrate:resetしてmigrateするのと同じ。
テーブルを変更した過程自体を記録として残しておきたい場合があります。その場合は、–tableオプションに変更するテーブル名を指定し、新たにマイグレーションファイルを作成します。
1 |
$ php artisan make:migration update_books_table --table=books |
生成されたファイルを下記のように編集し(ハイライト部分)、再度マイグレーションを実行します。
2020_01_16_044109_update_books_table.php
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 |
<?php use Illuminate\Support\Facades\Schema; use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; class UpdateBooksTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::table('books', function (Blueprint $table) { $table->string('publisher'); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::table('books', function (Blueprint $table) { $table->dropColumn('publisher'); }); } } |
16行目
–tableオプションを付けてマイグレーションファイルを作成した場合、Schema::tableとなっていることが確認できます。
29行目
down()にはロールバック時の処理を記述しておきます。up()ですなわちマイグレーション実行時にpublisherカラムを追加するので、ロールバック時には基本的にその逆、publisherカラムを削除する処理を記述しています。
関連ページ
ロールバック・リセット
上述でも少し説明しましたが、ロールバックやリセットでマイグレーションの処理を戻すことができます。より正確に言えばマイグレーションファイルのdown()に記述された処理を実行していきます。
resetでは、存在するすべてのマイグレーションファイルのdown()が実行されます。
1 |
$ php artisan migrate:reset |
rollbackでは、直近にまとめて実行したマイグレーションファイルのdown()がすべて実行されます。
1 |
$ php artisan migrate:rollback |
–stepを付加すると逆上るマイグレーションファイル数を指定できます。例えば下記では最新から1つ目までのマイグレーションファイルのdown()のみが実行されます。
1 |
$ php artisan migrate:rollback --step=1 |
refreshでは、一旦存在するすべてのマイグレーションファイルのdown()が実行され(reset)、再度migrateされます。
1 |
$ php artisan migrate:refresh |
参照ページ・書籍