omachizura

仕事メモ、役に立ったスキルをまとめています。


Laravel5でテーブルをmigrationで作成して初期データをセット

Laravel5でテーブルをmigrationで作成して初期データをセットします。

テーブル定義

users

database/migrationsフォルダにusersを作成するファイルがすでに用意されています。

ログインに必要な情報がデフォルトではEメールアドレスになっていますが、ログインIDにしたかったのと、ユーザ名は姓名を分けて管理したかったので、以下のようにテーブル定義を少し変更しました。

Schema::create('users', function(Blueprint $table)
{
  $table->increments('id');
  $table->string('login_cd')->unique();
  $table->string('first_name');
  $table->string('last_name');
  $table->string('email')->nullable();
  $table->string('password', 60);
  $table->rememberToken();
  $table->timestamps();
});

first_nameが名でlast_nameが姓です。カラム名を英語で定義するとこの辺がわかりづらくなってしまいます。一般的にはどのように定義しているのか気になるところです。

命名規則で〜_idは特別な意味があるようなので、ログインIDはlogin_cdとしました。また、emailは現時点では使用しませんのでnull許可をしました。

migration

migrationコマンドを使用して、usersテーブルを作成します。

php artisan migrate

データベースにmigrationsテーブルとusersテーブルが作成されました。

migrationのリセット

実行したmigrationを取り消したい場合は以下のコマンドを実行します。

php artisan migrate:reset

//または

php artisan migrate:rollback

すべての動作をクリアするのがresetで直前の動作を取り消すのがrollbackです。手動でmigrationのファイルをいじってしまうとエラーになることがあります。エラーになってしまった場合の対処法は laravel5のmigrationでエラーになったときの対処法 で紹介しています。

seedで初期データをセット

usersテーブルはとりあえず新規にはデータを作成しないため、テーブル作成時に一緒に初期データを登録することにします。

初期データの作成

database/DatabaseSeeder.phpで初期データ登録の処理を実装します。

サンプルにならって、以下のように定義します。

<?php

use Illuminate\Database\Seeder;
use Illuminate\Database\Eloquent\Model;

use App\User; //これを忘れずに!

class DatabaseSeeder extends Seeder {

  /**
   * Run the database seeds.
   *
   * @return void
   */
  public function run()
  {
    Model::unguard();

    $this->call('UserTableSeeder');

    Model::reguard();
  }

}

class UserTableSeeder extends Seeder {

    public function run()
    {
        DB::table('users')->delete(); //最初に全件削除

        User::create([
          'login_cd' => 'i-yamada'
          ,'first_name' => '一郎'
          ,'last_name' => '山田'
          ,'password' => bcrypt('yamada123') //暗号化します
        ]);

        User::create([
          'login_cd' => 'j-sato'
          ,'first_name' => '次郎'
          ,'last_name' => '佐藤'
          ,'password' => bcrypt('sato456') //暗号化します
        ]);

    }

}

以下のコマンドでデータベースにデータを登録します。

php artisan db:seed

これでusersテーブルの作成と初期値のセットができました。