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

【Laravel 6.x】マイグレーションでMySQLデータベースのテーブルを作成・編集する

Laravelではデータベースのテーブルを作成・編集する方法としてマイグレーションという仕組みが用意されている。

前提

  • Laravel 6.6.1
  • PHP7.3
  • MySQL 5.6

マイグレーションの流れ

マイグレーションの流れは大まかに言えば、次の3ステップ。

  1. マイグレーションファイルを作成する
  2. マイグレーションファイルを編集する
  3. マイグレーションを実行する

1.マイグレーションファイルを作成する

マイグレーションファイルを作成するには、php artisan make:migration コマンドを使う。テーブルを新規作成する場合とテーブルを編集する場合でオプションが異なる。

1-1.テーブルを新規作成する場合

コマンド
$ php artisan make:migration 名前 --create=テーブル名

このコマンドを実行すると タイムスタンプ_名前.php のファイル名で、database/migrations にファイルが作成される。

例えば、名前を create_users_table 、テーブル名が users とすると、コマンドは以下のようになる。

コマンド例
$ php artisan make:migration create_users_table --create=users

上記をコマンドを実行すると、database/migrations2019_12_05_000000_create_users_table.php が作成される。

1-2.テーブルを編集する場合

コマンド
$ php artisan make:migration 名前 --table=テーブル名

このコマンドを実行すると タイムスタンプ_名前.php のファイル名で、database/migrations にファイルが作成される。

例えば、名前を add_api_token_column 、テーブル名が users とすると、コマンドは以下のようになる。

コマンド例
$ php artisan make:migration add_api_token_column --table=users

上記をコマンドを実行すると、database/migrations2019_12_05_083543_add_api_token_column.php のような名前のファイルが作成される。

2.マイグレーションファイルを編集する

作成したマイグレーションファイルと開くと、以下のようになっている。up メソッドと down が出来ている。

作成したファイル例:2019_12_05_083543_add_api_token_column.php
<?php

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

class AddApiTokenColumn extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::table('users', function (Blueprint $table) {
            //
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::table('users', function (Blueprint $table) {
            //
        });
    }
}

up メソッドには追加したい作業を記述し、down メソッドには up メソッドの内容を元に戻す作業を記述する。それぞれ Schema::table() が作成されている。テーブルを作成する、すなわち、make:migration のオプションを --create にすると `Schema::create()' が作成されている。

例にupメソッドとdownメソッドを追加
<?php

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

class AddApiTokenColumn extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::table('users', function (Blueprint $table) {
            // api_token カラムを password カラムの次に追加。
            // ユニークキーを追加し、
            // NULL を許可で、デフォルトをNULLにする。
            $table->string('api_token', 80)->after('password')
                        ->unique()
                        ->nullable()
                        ->default(null);
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::table('users', function (Blueprint $table) {
            // api_token カラムを削除
            $table->dropColumn('api_token');
        });
    }
}

3.マイグレーションを実行する

以下の php artisan migrate コマンドを実行することで、マイグレーションファイルの内容がデータベースに反映される。同時にデータベースの migrations テーブルにファイル名と実行順序が保存される。

コマンド
$ php artisan migrate

以下のように MigratingMigrated が表示されたらOK。

コマンド実行後の例
Migrating: 2019_12_05_083543_add_api_token_column
Migrated:  2019_12_05_083543_add_api_token_column (0.01 seconds)
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
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