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

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

More than 1 year has passed since last update.

最近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
でできます。とても容易ですね。

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

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
ユーザーは見つかりませんでした