データベースのテーブル作成や編集などを管理する方法として「マイグレーション」ってのがあります。
その方法は大きくわけて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
で新規テーブルの作成・編集ができます。
id
とtimestamps
はデータがテーブルに入るたびに勝手につくので必須。
Schema::drop
はテーブルを削除します。
::create
と::drop
の第一引数であるphoto
はテーブル名を意味します。
#マイグレーション実行
$ php artisan migrate
これでテーブルができます。
#新たにマイグレーションファイルを追加したとき
ただ php artisan migrate
するのではなく、
$ php artisan migrate:refresh
としてください。
refresh
で巻き戻してからじゃないとうまくいかないので。