Help us understand the problem. What is going on with this article?

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で巻き戻してからじゃないとうまくいかないので。

shosho
Qiitaには忘れそうなこと、勉強したことをメモしてます。
https://shosho-egg.hateblo.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした