Laravel学習帳

Laravel5.2の学習帳です。開発環境はXAMPP for Windows 5.6.19 / 本番環境はさくらサーバー(スタンダード)

基礎知識

マイグレーション(新規作成)

2017/10/10

LaravelではマイグレーションでDBを管理します。

マイグレーションとはデータベースのバージョンコントロールのようなものです。

チーム内でスキーマを簡単に更新し共有できるようにしてくれます。

本日はマイグレーションについてのエントリーです。

 

方法

マイグレーションの方法の流れは大きく分けて3段階あります。

1)マイグレーションファイルの作成
2)マイグレーションファイルの編集
3)マイグレーション実行

 

1)マイグレーションファイルの作成

マイグレーションファイルってのは「どんなテーブルを作るか」というテーブルの設計書です。

まずは、マイグレーションファイルを作成をします。

$ php artisan make:migration {マイグレーションファイル名}
【 補足 】
コマンドにオプションをつけるとマイグレーションファイルに雛形が作成されます。

$ php artisan make:migration create_users_table --create=users
:
public function up()
{
  Schema::create('users', function (Blueprint $table) {
  $table->increments('id');
  $table->timestamps();
  });
}
:

マイグレーションのファイル名は実はなんでもかまいません。

しかし Laravel のお作法通りにいくなら。。

例)テーブル名 posts

アクション マイグレーションファイル名
新規作成 create_posts_table
更新 update_posts_table

上記のコマンドを実行すると、プロジェクトルート以下の database/migrations にファイルが生成されます。

 

2)マイグレーションファイルの編集

生成されたマイグレーションファイルを開くと以下のようになります。

<?php

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

class CreatePostsTable extends Migration
{
  /**
  * Run the migrations.
  *
  * @return void
  */
  public function up()
  {
  //
  }

  /**
  * Reverse the migrations.
  *
  * @return void
  */
  public function down()
  {
  //
  }
}

up()とdown()に記述していきます。

up()にはテーブルやカラムの定義を記述します。

down()にはロールバック処理を記述します。

public function up()
{
  Schema::create('posts', function (Blueprint $table) {
  $table->increments('id');
  $table->string('post_body');
  $table->timestamps();
  });
}
public function down()
{
  Schema::drop('posts');
}

以下、解説していきます。

まず、postsテーブルの作成を定義します。

Schemaファサードのcreateメソッドを使用します。

:
Schema::create('posts', function (Blueprint $table) {
:
テーブルを更新するときはSchemaファサードのtableメソッドを使います。

Schema::table('posts', function ($table) {
  $table->string('email');
});

次にテーブルのカラムを作成していきます。

メソッド 説明
increments() $table->increments('id'); 「符号なしINT」を使用した自動増分ID(主キー)
string() $table->string('email'); VARCHARカラム
string() $table->string('name', 100); 長さ指定のVARCHARカラム
integer $table->integer('votes'); INTEGERカラム
text() $table->text('description'); TEXTカラム
timestamps() $table->timestamps(); created_atとupdate_atカラムの追加
boolean() $table->boolean('confirmed'); BOOLEANカラム
date() $table->date('created_at'); DATEカラム

 

3)マイグレーション実行

マイグレーションファイルとはテーブルの設計書だと言いました。

設計書を作ったらそれを実行しなければテーブルは作成できません。

この実行にあたるのが「マイグレーション」になります。

$ php artisan migrate

これでDBにテーブルができます。

チュートリアルをやってさらに理解を深めていきましょう。

 

チュートリアル

「ER図について」の記事のチュートリアルで

・「部署」テーブル
・「従業員」テーブル

の二つのER図を作成しました。

今回この二つのテーブルをマイグレーションで作成します。

 

カラムの定義

「部署」テーブル(depts)

カラム名 データ型 キー
dept_id int(11) primary key
dept_name varchar(32) -

「従業員」テーブル(employees)

カラム名 データ型 キー
id int(10) auto_increment
dept_id int(11) -
name varchar(32) -

 

手順

1)マイグレーションファイルの作成
2)マイグレーションファイルの編集
3)マイグレーション(実行)
4)確認

 

1)マイグレーションファイルの作成

「部署テーブル」のマイグレーションファイルを作成

$ php artisan make:migration create_depts_table --create=depts

「従業員テーブル」のマイグレーションファイルを作成

$ php artisan make:migration create_employees_table --create=employees

 

2)マイグレーションファイルの編集

「部署テーブル」の定義

:
 public function up()
  {
  Schema::create('depts', function (Blueprint $table) {
    $table->integer('dept_id')->primary(); // 主キー追加
    $table->string('dept_name',32);
  });
  }

  public function down()
  {
  Schema::drop('depts');
  }

「従業員テーブル」の定義

:
public function up()
  {
  Schema::create('employees', function (Blueprint $table) {
  $table->increments('id');
  $table->integer('dept_id');
  $table->string('name',32);
  });

  }

  public function down()
  {
  Schema::drop('employees');
:

 

3)マイグレーション(実行)

マイグレーションファイルを実行させます。

$ php artisan migrate

 

4)動作確認

テーブルが作成されているか確認。

show tables;

【 補足 】
実行したマイグレーションは「migrations」テーブル に登録されます。

「部署」テーブルの中身を確認。

desc depts;

「従業員」テーブルの中身を確認。

desc employees;

マイグレーションについては以上です。

 

-基礎知識