WinRoadのLaravel4初心者講座

次世代PHPフレームワークのLaravel4を初心者向けに解説して参ります。

Winroad徒然草の管理人がお届けします
Generatorsでマイグレーションの生成

Generatorsでマイグレーションの生成

このエントリーをはてなブックマークに追加

Generatorsでマイグレーションを生成する前に、デフォルトのArtisanコマンドでマイグレーションを生成してみたいと思います。

コマンドプロンプトを起動したら、Laravelのインストールフォルダに移動し、migrate:makeコマンドを実行します。

cd c:\xampp\htdocs\laravel
php artisan migrate:make create_posts_table

app/database/migrationsフォルダ内に、日付_create_posts_table名でファイルが作成されているはずです。中を覗いてみましょう。

app/database/migrations/2014_05_21_184751_create_posts_table.php

<?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メソッドとdowmメソッドは作成されていますが、中身は何もありません。この中は自分で作成しなければなりません。

generate:migrationコマンド

次に、Generatorsでマイグレーションを生成してみたいと思います。Generatorsでのマイグレーション実行コマンドは、geneator:migrationです。このコマンドの後に、テーブルの作成や、フィールドの追加、フィールドの削除、テーブルの削除を行うキーワードを入力します。

テーブルの作成(create_テーブル名_table)

generator:migrationコマンドの後に、create_テーブル名_tableキーワードを入力します。※最後の_tableは無くても大丈夫です。

php artisan generate:migration create_posts_table

同様にGeneratorsで生成されたマイグレーションの中身を覗いてみます。

app/database/migrations/2014_05_21_185440_create_posts_table.php

<?php

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

class CreatePostsTable extends Migration {

    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('posts', function(Blueprint $table) {
            $table->increments('id');
            $table->timestamps();
        });
    }


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

}
  • usersテーブルの作成とプライマリーキー(id)と、timestamps(created_at、updated_at)の作成まで行うマイグレーション(スキーマビルダー)を生成しています。
  • ※デフォルトのAritisanコマンドでも、–table=”post”オプションを追加するとテーブルまで生成してくれますが、GenereatorsのAritsanコマンドの方が遙かに簡単で便利なのがわかると思います。
  • 尚、最後の_tableは無くても同じ内容のマイグレーションが生成されます。

作成された(未実行の)マイグレーションを実行するには、migrateコマンドを実行します。

php artisan migrate

phpMyAdminで確認するとpostsテーブルが作成されているのが確認できます。

2014-05-21 19-26-10

フィールドの追加(add_フィールド名_to_テーブル名)

テーブルにフィールドを追加するには、add_フィールド名_to_テーブル名を使用します。

コマンドプロンプトで実際に実行してみます。

php artisan generate:migration add_user_id_to_posts_table

下記のようなマイグレーションファイルが作成されます。

app/database/migrations/2014_05_21_195017_add_user_id_to__posts_table.php

<?php

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

class AddUserIdToPostsTable extends Migration {

    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::table('posts', function(Blueprint $table) {
            //この中は自分で作成する
        });
    }


    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::table('posts', function(Blueprint $table) {
            //この中は自分で作成する
        });
    }

}
  • Schema::tableメソッドまでは、作成してくれます。中身は自分で作成する必要があります。※下記で紹介するfieldsオプションを使えば、簡単に中身も生成してくれます。
  • 同様に、insert_フィールド名_to_テーブル名でも、同じようなマイグレーションファイルが生成されますので、中身を作成してから、php artisan migrateを実行します。

その他のキーワード

  • remove(remove_user_id_from_posts_table)
  • delete(delete_posts_table)
  • drop(drop_post_table)

fieldsオプション

上記のコマンドにfieldsオプションをつけると、フィールドを作成したり、削除するスキーマビルダーを生成してくれます。それでは、実際に見てみましょう。

php artisan generate:migration create_posts_table --fields="title:string, body:text"
  • fieldsオプションのカンマの後には、必ずスペースを入力してください。スペースを入力し忘れるときちんと生成されませんので、ご注意ください。

下記のようなマイグレーションが作成されています。

<?php

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

class CreatePostsTable extends Migration {

    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('posts', function(Blueprint $table) {
            $table->increments('id');
            $table->string('title');
            $table->text('body');
            $table->timestamps();
        });
    }


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

}
  • プライマリーキー(id)とtimestamps(created_at、updated_at)の間に、オプションで指定したtitleとbodyが生成されています。

php artisan migrateを実行して、作成されたpostsテーブルを見てみましょう。下記のように作成されています。

2014-05-21 20-47-24

 fieldsオプションの指定方法

fieldsオプションは、フィールド名:データ型のように記述します。

(例)

--fields="first_name::string(50), last_name:string(50)"
--fields="age:integer, birth_day:date"
--fields="username:stirng, email:string:unique"
--fields="subject:string:nullable, body:text"
  • データ型:(コロン)に続けて、uniqueキーやnullabelキー、defaultキーを付与することが出来ます。

fieldsオプションのデータ型

fieldsオプションのデータ型は、下記のように指定できます。

  • Vachar型
    (例)string(100), string:unique
  • Text型
    (例)text, text:nullable
  • 数値型(INT型)
    integer
  • DATE型
    date

下記のようなコマンドを実行して、生成されたマイグレーションを確認してみましょう。※下記は1行で入力します。尚、fieldsの前のハイフンは2つです。カンマの後のスペースは忘れずに!

php artisan migration create_users_table –fields=”username:string(50), email:string(100), role_id:integer:nullable, birth_day:date, note:text:nullable

<?php
use Illuminate\Database\Migrations\Migration;
 use Illuminate\Database\Schema\Blueprint;
class CreateUsersTable extends Migration {
/**
 * Run the migrations.
 *
 * @return void
 */
 public function up()
 {
 Schema::create('users', function(Blueprint $table) {
 $table->increments('id');
 $table->string('username', 50);
 $table->string('email', 100);
 $table->integer('role_id')->nullable();
 $table->date('birth_day');
 $table->text('note')->nullable();
 $table->timestamps();
 });
 }
/**
 * Reverse the migrations.
 *
 * @return void
 */
 public function down()
 {
 Schema::drop('users');
 }
}

php artisan migrateを実行すると、下記のようなテーブルが作成されました。

2014-05-21 21-43-24

どうです、コマンドを覚えて使いこなせば、かなり便利だと思いませんか。この便利さが人気の秘密だと思います。

« »

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です