LaravelのMigrationについて
-
公式ドキュメント
-
公式ドキュメント引用
マイグレーションとはデータベースのバージョンコントロールのようなもので、
チームでアプリケーションデータベースのスキーマを簡単に更新し共有できるようにしてくれます。
通常、マイグレーションはアプリケーションのデータベーススキーマを簡単に構築できるようにする、
Laravelのスキーマビルダーと一緒に使用します。
コマンド一覧
migrate Run the database migrations
migrate:install Create the migration repository
migrate:refresh Reset and re-run all migrations
migrate:reset Rollback all database migrations
migrate:rollback Rollback the last database migration
migrate:status Show the status of each migration
migrate
-
Migrationを実行します
-
実行したMigrationはテーブル
migrations
に登録されます+----------------------------------------+-------+ | migration | batch | +----------------------------------------+-------+ | 2016_08_08_155034_create_videos_lookup | 1 | | 2016_08_08_155046_create_videos | 1 | | 2016_08_17_155046_modified_videos | 1 | +----------------------------------------+-------+
-
テーブル
migrations
に登録されたMigrationはmigrate
コマンドで実行されません- このため新規作成と変更と別々のMigrationを作成する必要があります
- テーブルのバージョン管理です
migrate:install
-
migrations
テーブルを作成します - ただそれだけ
migrate:refresh
- Migrationを再実行してテーブルを再構築します
- Migrationが存在するテーブルは全て初期化されます
- データも全て吹っ飛びます(!要注意!)
- テスト環境でテーブル定義を作りなおした時なんかに使える
- 本番で使わないこと!
migrate:reset
- 全てのMigration操作を元に戻す
- 元に戻すっていうかテーブル全部削除する感じ??
migrate:rollback
-
一つ前のMigration操作を元に戻す
-
migrations
で管理されているbatch
カラムで制御している -
migrations
テーブルが以下の状態でコマンドを打つと2016_08_17_155811_ModifyVideos2
の操作がロールバックされる+----------------------------------------+-------+ | migration | batch | +----------------------------------------+-------+ | 2016_08_08_155034_create_videos_lookup | 1 | | 2016_08_08_155046_create_videos | 1 | | 2016_08_17_155520_ModifyVideos | 1 | | 2016_08_17_155811_ModifyVideos2 | 2 | +----------------------------------------+-------+
-
コマンド実行後の
migrations
+----------------------------------------+-------+ | migration | batch | +----------------------------------------+-------+ | 2016_08_08_155034_create_videos_lookup | 1 | | 2016_08_08_155046_create_videos | 1 | | 2016_08_17_155520_ModifyVideos | 1 | +----------------------------------------+-------+
migrate:status
-
Migrationファイルと実行状況を見ることができる
+------+----------------------------------------+ | Ran? | Migration | +------+----------------------------------------+ | Y | 2016_08_08_155034_create_videos_lookup | | Y | 2016_08_08_155046_create_videos | | Y | 2016_08_17_155520_ModifyVideos | | N | 2016_08_17_155811_ModifyVideos2 | +------+----------------------------------------+
Migrationで運用する方法を考える
テーブル新規作成
- LaravelのMigrationを使用する
Migrationファイルを作成
-
Laravelプロジェクトのルートへ移動
-
Migrationファイル作成コマンドを打つ
php artisan make:migration [migration ファイル名] ex) php artisan make:migration CreateVideos
-
Migrationファイルは以下ディレクトリに作成される
database/migrations/[作成日時]_modified_videos.php ex) `database/migrations/2016_08_08_155046_create_videos.php
Migrationにテーブル定義を記述
-
作成したMigrationファイルにテーブル定義を記述していく
-
記述方法の詳しいドキュメントは以下
-
作成例
public function run() { // videos テーブルを作成する処理 Schema::create('videos', function (Blueprint $table){ $table->engine = 'InnoDB'; $table->increments('id'); $table->string('title'); $table->string('description'); $table->timestamps(); $table->softDeletes(); }); } public function down(){}
Migrationコマンドを実行
-
作成したMigrationを実行してテーブルを新規作成する
php artisan migrate
-
これでテーブルが新規作成される
-
一度実行したMigrationはテーブル
migrations
に記録され上記コマンドで再実行されることはない
テーブル定義変更
- LaravelのMigrationを使用して定義を変更する
- 一度実行したMigrationファイルは
php artisan migrate
で再実行されることがないので、定義変更用のMigrationファイルを作る必要がある
Migrationファイルを作成
-
基本的に新規作成時と同じ
php artisan make:migration [migration ファイル名] ex) php artisan make:migration ModifyVideos
Migrationに変更したい定義を記述
-
作成したMigrationファイルにテーブル定義を記述していく
-
記述方法の詳しいドキュメントは以下
-
作成例
public function run() { // videos テーブル定義を変更する Schema::table('videos', function (Blueprint $table){ // 新規カラムを追加する $table->string('new_column'); // カラムの定義を変更する $table->string('original_file_name')->nullable()->change(); }); } public function down(){}
Migrationコマンドを実行
-
作成したMigrationを実行してテーブル定義を変更する
php artisan migrate
-
これでテーブル定義が変更される