人生の恥は書き捨て

プログラムとかいろいろ

【Laravel入門】データベース接続とマイグレーション

マイグレーションとは

マイグレーション(migration)はデータベース構成のバージョン管理ツールのようなものです。
マイグレーションを使うことで、

といったことができます。

今回はユーザーテーブルを作ってみることにします。

database接続の設定

app/config/database.phpに接続の設定が書いてあります。
connectionsの部分のdatabase名やuser名、passwordなどを適切に設定してください。

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

artisanコマンドが使える場所で、

php artisan migrate:make CreateUserTable

を実行します。CreateUserTableの部分はお好きな様に。
すると2014_08_03_132022_CreateUserTable.phpというような、
作成日時+指定した名前.phpのファイルが
app/database/migration/以下に作成されます。

このファイルにデータベースの設定内容を書いていきます。

ファイルを開くと

<?php                                                                                                                                                                                

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

class CreateUserTable extends Migration {

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

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

}

こんな感じになっていると思います。
upの部分には新しく追加したい操作を、
downのところにはrollbackする時の操作を書いていきます。

テーブル作成の操作を書くとこんな感じ。

<?php                                                                                                                                                                                

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

class CreateUserTable extends Migration {

    /** 
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {   
        Schema::create('users', function($table)
        {   
            $table->increments('id');
            $table->string('username', 20);
            $table->string('password', 64);
            $table->timestamps();
        }); 
    }   

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

}

upにはusersテーブルを作るように、downにはテーブルを消すように書いてあります。

書き終わったら。migrationを実行します。

php artisan migrate

実行するか確認されるのでEnterしましょう。
するとデータベース内にusersテーブルが作成されます。

mysql> desc users;
+------------+------------------+------+-----+---------------------+----------------+
| Field      | Type             | Null | Key | Default             | Extra          |
+------------+------------------+------+-----+---------------------+----------------+
| id         | int(10) unsigned | NO   | PRI | NULL                | auto_increment |
| username   | varchar(20)      | NO   |     | NULL                |                |
| password   | varchar(64)      | NO   |     | NULL                |                |
| created_at | timestamp        | NO   |     | 0000-00-00 00:00:00 |                |
| updated_at | timestamp        | NO   |     | 0000-00-00 00:00:00 |                |
+------------+------------------+------+-----+---------------------+----------------+

ここで、認証用のremember_tokenカラムを追加したいと思います。

tableの作成と同様に、

php artisan migrate:make ModifyUserTable

として、設定追加用のファイルを作ります。

<?php

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

class ModifyUserTable extends Migration {

    /** 
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {   
        Schema::table('users', function($table)
        {   
            $table->string('remember_token', 100);
        }); 
    }   

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

    }   

}

そして

php artisan migrate

すると

mysql> desc users;
+----------------+------------------+------+-----+---------------------+----------------+
| Field          | Type             | Null | Key | Default             | Extra          |
+----------------+------------------+------+-----+---------------------+----------------+
| id             | int(10) unsigned | NO   | PRI | NULL                | auto_increment |
| username       | varchar(20)      | NO   |     | NULL                |                |
| password       | varchar(64)      | NO   |     | NULL                |                |
| created_at     | timestamp        | NO   |     | 0000-00-00 00:00:00 |                |
| updated_at     | timestamp        | NO   |     | 0000-00-00 00:00:00 |                |
| remember_token | varchar(100)     | NO   |     | NULL                |                |
+----------------+------------------+------+-----+---------------------+----------------+
6 rows in set (0.00 sec)

という風にカラムが追加できます。

更に、

php artisan migrate:rollback

とするとremember_tokenカラムを追加する前に戻すことができます。

rollbackする際に class not foundのエラーが出ることがあります(僕は出ました)。
この際は composer dump-autoload として、ファイルを読み込み直すと正しく実行できます。