LoginSignup
103
101

More than 5 years have passed since last update.

laravelでのマイグレーション作成手順

Last updated at Posted at 2016-01-04

最近laravelを触る機会があったので、そこで学んだことを
メモしていきます。

今回はマイグレーション手順です。
こちらの記事は4.系のコマンドになります。

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

php artisan migrate:make
コマンドでマイグレーションファイルが
app/database/migrations
に作成されます。

例えば
php artisan migrate:make create_users_table
の様にすると
Created Migration: 2016_01_04_103448_create_users_table
Generating optimized class loader
というメッセージが出力され
2016_01_04_103448_create_users_table
が先ほどのフォルダに作成されているかと思います。

テーブルの作成

作成されたマイグレーションファイルを見てみると

2016_01_04_103448_create_users_table.php

class CreateUsersTable extends Migration {

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

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

}

の様になっているかと思います。

up()にマイグレーションを実行した際の処理を
down()にup()の処理を取り消す処理を実装します。

テーブルを作成するソースはこんな感じになります。

2016_01_04_103448_create_users_table.php
class CreateUsersTable extends Migration {

    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::connection('user_data')->create('users', function($table){
            $table->increments('id');

            $table->string('name', 32)->default("");

            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::connection('user_data')->drop('users');
    }

}

簡単に解説すると、

Schema::connection('user_data')->create('users', function($table)
で、user_dataデータベースにusersというテーブルを作成しています。

$table->increments('id');
ではidというオートインクリメントされるカラムを作成しています。

$table->string('name', 32)->default("");
ではnameというstring型のカラムを作成しています。
32というのはstringのサイズで
default("")部分はデフォルトではカラムに空文字を入れる様に
指定しています。

$table->timestamps();
は、created_atとupdated_atというtimestamp型のカラムを作成します。
updated_atは更新された時間を
created_atは作成された時間を保持します。

down()内の
Schema::connection('user_data')->drop('users');
ではup()で作成したusersテーブルを削除しています

テーブルの更新

マイグレーションではテーブルの作成だけでなく更新をするときもあるかと思います。
更新方法も簡単にまとめます。
基本的には作成と同じで
php artisan migrate:make add_column_age_to_users_table
で作成し、up()とdown()に処理を実装していきます。

今回はサンプルとして以下の様のコードを書きました。

    public function up()
    {
        Schema::connection('user_data')->table('users', function($table){
            $table->integer('age')->after('name')->default(0);
        });

    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::connection('user_data')->table('users', function($table){
            $table->dropColumns('age');
        });
    }

こちらも簡単に解説すると、

Schema::connection('user_data')->table('users', function($table)
で更新するテーブルを指定しています。
createと違い作成はしません。

$table->integer('age')->after('name')->default(0);
でageというint型のカラムを追加しています。
after('name')はnameというカラムの後ろに追加するという指定になります。

down()の
$table->dropColumns('age');
ではup()で追加したageというカラムを削除しています。

マイグレーションの実行とロールバック

といっても実行は簡単で、
php artisan migrate
で実行できます。
またロールバックも
php artisan migrate:rollback
でできます。とても容易ですね。

今回は以上です。
サーバーサイドの方からすると当たり前のことなのかもしれませんが、
普段クライアントサイドメインの自分にとっては
色々と新鮮で面白いです。

103
101
2

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
103
101