2018/10/12
Laravelではデータベースの作成や編集などを管理する方法として「マイグレーション」というものがあります。
今回はこのマイグレーションについてのエントリーです。
マイグレーションとは
通常テーブルを新規に作成するには必要なSQL文を直接実行して作成します。
それに対してマイグレーションを使う場合はまず、マイグレーションファイルと呼ばれるスクリプトファイルを作成します。
テーブルの新規作成やカラムの追加はこのスクリプトファイルに記述していきます。
マイグレーションによるテーブル作成の流れ
【1】マイグレーションファイルの作成
【2】マイグレーションファイルの編集
【3】マイグレーションファイルの実行(マイグレーション)
【1】マイグレーションファイルの作成
マイグレーションファイルの作成はartisanコマンドを使います。
php artisan make:migration {マイグレーションファイル名} --create={テーブル名}
マイグレーションファイル名のつけ方ですが
create_{テーブル名}_table
とつけるとわかりやすくていいです。
例えば article というテーブルとマイグレーションファイルを作成するなら
php artisan make:migration create_article_table --create=article
これを実行すると以下の二つが生成されます。
① "article" というデータベースのテーブル
② "2016_09_07_133821_create_articles_table.php"というマイグレーションファイル
マイグレーションファイルは実行順がわかるように自動でファイル名にタイムスタンプが付与されます。
【2】マイグレーションファイルの編集
マイグレーションファイルは database/maigrations フォルダに作成されます。
<?php use IlluminateDatabaseSchemaBlueprint; use IlluminateDatabaseMigrationsMigration; class CreateArticlesTable extends Migration { public function up() { Schema::create('articles', function(Blueprint $table) { $table->increments('id'); $table->timestamps(); }); } public function down() { Schema::drop('articles'); } }
upメソッドの中にはテーブル作成時の記述を書きます。
downメソッドの中にはテーブル削除時の記述を書きます。
仮に 「名前(name)」 「コメント(comment)」 「タグ(tag)」 のカラムを作成するとします。
<?php use IlluminateDatabaseSchemaBlueprint; use IlluminateDatabaseMigrationsMigration; class CreateArticlesTable extends Migration { public function up() { Schema::create('articles', function(Blueprint $table) { $table->increments('id'); $table->string('name'); //追加 $table->string('comment'); //追加 $table->string('tag'); //追加 $table->timestamps(); }); } public function down() { Schema::drop('articles'); } }
このようになります。
追加で記述した "$table->string('name');" のstringはカラムタイプといいます。
Laravelでは様々なカラムタイプが指定できますので以下をご参考にください。
使用できるカラムタイプ|Laravel 5.1 データベース:マイグレーション
【3】マイグレーションファイルの実行(マイグレーション)
マイグレーションファイルをデータベースに反映させるためには、再びartisanコマンドを使用します。
$ php artisan migrate
マイグレーション機能のメリット
マイグレーション機能を紹介しましたが、別に必ず使わなくてもOKです。
いつものようにphpmyadminやSQLコマンドでテーブルを作成すればいいのです。
では何故マイグレーションでテーブルを作成することが推奨されているのでしょうか?
マイグレーションファイルをGITで管理すれば、誰がどのカラムを追加したか詳細にわかるからです。
自分以外の人が編集することも想定するなら、できるだけマイグレーションを使ってテーブルを作成しましょう。
仕事で Laravel を使っています。気づいたことや新しい発見など情報を発信していきます。問い合わせはこちら。