Edited at

Laravelのマイグレーション

More than 3 years have passed since last update.

データベースのテーブル作成や編集などを管理する方法として「マイグレーション」ってのがあります。

その方法は大きくわけて2段階。


  1. マイグレーションファイルの作成

  2. マイグレーション実行

マイグレーションファイルってのは「どんなテーブルを作るか」というテーブルの設計書。

当然設計書を作ったらそれを実行しなければテーブルはできないわけで、この実行にあたるのがマイグレーションです。

今回は実際にフォームで受け取ったデータを格納するテーブルを作っていきます。

公式ページの Database:Migrationsのところにあたります。


マイグレーションファイルの作成

$ php artisan make:migration {テーブル名}_table

でテーブル作成用のマイグレーションファイルが作成されます。

(ディレクトリの場所は database/migrations


追記:オプションについて

$ php artisan make:migration create_users_table --create=users

上記コマンドのように--table--createオプションをつけることができます。

(公式ドキュメントGenerating Migrations 参照)

--create--tableのうしろに=でマイグレーションファイルで扱うテーブルの名前を引数として渡すと、

出来上がるマイグレーションファイルはそのテーブル名を含んで雛形が作られます。

(テーブルの作成を行うSchema::create()またはテーブルの編集を行うSchema::table()


マイグレーションファイルの構成

<?php

use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class Photo extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
// テーブル作成

/* optionをつけた場合は下のような雛形が最初から作られている

Schema::create('photos', function (Blueprint $table) {
$table->increments('id');
$table->timestamps();
});
*/
}

/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
// テーブル削除

/* optionをつけた場合

Schema::drop('users');
*/
}
}

「up」の中にはテーブル作成時の記述、「down」の中にはテーブル削除時の記述を書きます。

 

 

「名前(name)」「コメント(comment)」「タグ(tag)」カラムのあるテーブルを作りたいとすると、

<?php

use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class Photo extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('photo', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('comment');
$table->string('tag');
$table->timestamps();
});

}

/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::drop('photo');

}
}

Schema::というのはスキーマビルダと呼ばれるもので、テーブルの作成・編集が可能。

Schema::createで新規テーブルの作成・編集ができます。

idtimestampsはデータがテーブルに入るたびに勝手につくので必須。

Schema::dropはテーブルを削除します。

::create::dropの第一引数であるphotoはテーブル名を意味します。


マイグレーション実行

$ php artisan migrate

これでテーブルができます。


新たにマイグレーションファイルを追加したとき

ただ php artisan migrate するのではなく、

$ php artisan migrate:refresh

としてください。

refreshで巻き戻してからじゃないとうまくいかないので。