LoginSignup
137
150

More than 5 years have passed since last update.

Laravelのマイグレーション

Last updated at Posted at 2016-04-27

データベースのテーブル作成や編集などを管理する方法として「マイグレーション」ってのがあります。
その方法は大きくわけて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で巻き戻してからじゃないとうまくいかないので。

137
150
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
137
150