[PHP] Laravelのマイグレーションで、テーブルを新規作成する
こんにちは、@yoheiMuneです。
マイグレーション機能があるとデータベースの管理が簡単にできて便利です。Laravelのマイグレーション機能を用いて、DBテーブルの新規作成する方法をブログに書きたいと思います。
 
マイグレーション機能が便利な点として、Create文などのSQLそのものを書く必要がないこと、複数のデータベースに同じ記述で対応できること、ロールバックもコマンド1つでできること、PHPUnitテストなどでもそれが利用できること、途中から参加した開発者のデータベース設定がすぐに終わること、など色々とメリットがあります。マイグレーションを開発/運用で利用すると便利なことが多いです。
Laravelにもマイグレーション機能が用意されていて、様々な機能が提供されています。今日はその中で、テーブルの作成についてブログを書きたいと思います。
また、データベースも事前に作成しておく必要があります。以下のコマンドで作成します。
また、
Database: Migrations - Laravel(英語、公式)
データベース:マイグレーション 5.5 Laravel(日本語)
最後になりますが本ブログでは、PHP、サーバー、フロントエンド、Swift、Node.js、Python、Java、Linux、インフラ、Go言語、機械学習、などの技術トピックを発信をしていきます。「プログラミングで困ったその時の、解決の糸口に!」そんな目標でブログを書き続けています。ぜひ、本ブログのRSSやTwitterをフォローして貰えたら嬉しいです ^ ^
最後までご覧頂きましてありがとうございました!
マイグレーション機能があるとデータベースの管理が簡単にできて便利です。Laravelのマイグレーション機能を用いて、DBテーブルの新規作成する方法をブログに書きたいと思います。
 
目次
対象バージョン
Laravelの5.6を対象としていますが、5系なら同じと思います。違う部分は適宜読み替えを御願いします。マイグレーション機能とは
テーブル作成やカラム追加などのデータベースへの変更を管理する機能です。Laravelの場合には、変更内容を記載したマイグレーションファイルを作成し(変更ごとに1つずつ作成する)、それをArtisanコマンドで実行します。マイグレーション機能が便利な点として、Create文などのSQLそのものを書く必要がないこと、複数のデータベースに同じ記述で対応できること、ロールバックもコマンド1つでできること、PHPUnitテストなどでもそれが利用できること、途中から参加した開発者のデータベース設定がすぐに終わること、など色々とメリットがあります。マイグレーションを開発/運用で利用すると便利なことが多いです。
Laravelにもマイグレーション機能が用意されていて、様々な機能が提供されています。今日はその中で、テーブルの作成についてブログを書きたいと思います。
テーブル作成のマイグレーションを行う
マイグレーションは3つのステップで実現できます。マイグレーションファイルの作成、マイグレーションファイルへの記載、マイグレーションの実行、です。マイグレーションファイルの作成する
artisanコマンドで、マイグレーションファイルを新規作成します。# Ownersテーブルを新規作成するための、マイグレーションファイルを作るコマンド. php artisan make:migration create_owners_table
create_xxx_tableのxxxにテーブル名を記載することで、そのテーブルを作成する為のマイグレーションファイルが作成されます。作成されたファイルは、以下に保存されます。# マイグレーションのファイルパス # ファイル名にはそれを作成した日時が含まれる. database/migrations/2018_05_17_101656_create_owners_table.php作成直後は以下のような記述となっています。
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateOwnersTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()  // マイグレーション実行時に呼び出される関数.
    {
        Schema::create('owners', function (Blueprint $table) {
            $table->increments('id');  // 主キー
            $table->timestamps();      // created_at と updated_at カラムの作成.
        });
    }
    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down() // ロールバック時に呼び出される関数.
    {
        Schema::dropIfExists('owners');
    }
}
up()とdown()の2つのメソッドがあります。マイグレーション実行時にはup()が呼び出され、その中でSchema::createを実行することでテーブルを新規に作成します。マイグレーションファイルを編集する
上記で作成したマイグレーションファイルを編集して、up()関数のコールバックの中に、追加したいカラムを追記します。
public function up()
{
    Schema::create('owners', function (Blueprint $table) {
        $table->increments('id');
        $table->string("login_id", 64)->unique();
        $table->string("password");
        $table->string("access_token")->nullable();
        $table->timestamp("access_token_expired_at");
        $table->timestamps();
    });
}
$table->string()は文字列のカラムを定義し、$table->integer()は数値型のカラムを定義します。指定できるデータ型は多数あり、マイグレーションの「使用できるカラムタイプ」にて確認できます。nullable()はカラム修飾子と呼ばれるもので、カラムに制限を追加します。ここではNULL可のカラムを定義しています。カラム修飾子の一覧はマイグレーションの「カラム修飾子」を参照ください。unique()はユニークキーを定義しています。ユニークキーを含むインデックスの作成は、マイグレーションの「インデックス作成」を参照ください。マイグレーションを実行する
作成したマイグレーションファイルを実行するには、以下のArtisanコマンドを利用します。$ php artisan migrateこれでマイグレーションをデータベースに適用しました。なお事前にデータベースの接続設定が必要です。まだの場合には、[PHP] Macで、Laravel5.6の、起動、MySQL接続設定まで行うをご確認ください。
また、データベースも事前に作成しておく必要があります。以下のコマンドで作成します。
# MySQLの場合(データベース名は myapp ) CREATE DATABASE myapp CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;絵文字を格納できる
utf8mb4という文字コードを、Laravelはデフォルトでは利用します。データベースも同じ文字コードで作成します。マイグレーション結果を確認する
データベースに接続して、マイグレーションが行われたことを確認します。# mysqlのコマンド # テーブル一覧を確認 mysql> show tables; +---------------+ | Tables_in_sss | +---------------+ | migrations | | owners | +---------------+ # テーブル定義の確認. mysql> desc owners; +-------------------------+------------------+------+-----+-------------------+-----------------------------+ | Field | Type | Null | Key | Default | Extra | +-------------------------+------------------+------+-----+-------------------+-----------------------------+ | id | int(10) unsigned | NO | PRI | NULL | auto_increment | | login_id | varchar(64) | NO | UNI | NULL | | | password | varchar(255) | NO | | NULL | | | access_token | varchar(255) | NO | | NULL | | | access_token_expired_at | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP | | created_at | timestamp | YES | | NULL | | | updated_at | timestamp | YES | | NULL | | +-------------------------+------------------+------+-----+-------------------+-----------------------------+ 8 rows in set (0.01 sec)
ownersテーブルが作成されていることがわかります。また、
migrationsテーブルも作成されます。中身には、マイグレーションの実行履歴が保存されます。mysql> select * from migrations; +----+---------------------------------------+-------+ | id | migration | batch | +----+---------------------------------------+-------+ | 1 | 2018_05_17_101656_create_owners_table | 1 | +----+---------------------------------------+-------+ 1 row in set (0.00 sec)
マイグレーションをロールバックする
作成したものを戻す場合には、以下のコマンドを実行します(以下のいずれかの方法を選択します)。# 最後に「一度に」実行したマイグレーションをまとめて元に戻す. $ php artisan migrate:rollback # 巻き戻す数を指定する. php artisan migrate:rollback --step=5 # 全部のマイグレーションを戻す. php artisan migrate:reset
参考資料
以下の資料を参照しました、ありがとうございます。Database: Migrations - Laravel(英語、公式)
データベース:マイグレーション 5.5 Laravel(日本語)
最後に
マイグレーションは便利なのですが、実際にファイルを編集しようとした時には、利用可能なデータ型や制約を確認する必要があり、それへのリンクも残しておきたいと思ってブログに書きました。今後もLaravel力をアップできたらと思います。最後になりますが本ブログでは、PHP、サーバー、フロントエンド、Swift、Node.js、Python、Java、Linux、インフラ、Go言語、機械学習、などの技術トピックを発信をしていきます。「プログラミングで困ったその時の、解決の糸口に!」そんな目標でブログを書き続けています。ぜひ、本ブログのRSSやTwitterをフォローして貰えたら嬉しいです ^ ^
最後までご覧頂きましてありがとうございました!
 
  
