laravel 開発日記 第4回 ~ マイグレーションとシーディング ~

今回はマイグレーションとシーディングを実行してみます。

なお、マイグレーションについては、 laravelにデフォルトで設定されている
・マイグレーション(migrations)
・ユーザー(users)
・パスワード管理(password_resets)
の3テーブルの登録、および、 ユーザーテーブルに「権限レベル(level)」カラムを追加します。

シーディングでは、このユーザーテーブルに、
・管理者(admin)
・上級ユーザー(manager)
・一般ユーザー(normal)
の3名を登録します。

まずは、SSHに接続、(以下コンソールにて) laravel_stagingフォルダに移動して、以下コマンド実行

php artisan migrate

データベースに、
・migrations
・password_resets
・users
の、3つのデータベースができました。

次に、ユーザーテーブルにカラムを追加するマイグレーションファイルを作成します。

php artisan make:migration add_level_to_users_table --table=users

/laravel_staging/database/migrations/フォルダに、 以下のファイルが作成されました。 2015_06_02_140153_add_level_to_users_table.php このファイルを修正します。

    public function up()
    {
        Schema::table('users', function(Blueprint $table)
        {
            $table->text('level')->nullable();
        });
    }

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

アップ後、再びマイグレーションします。

php artisan migrate

phpMyAdminでデータベースを確認すると、 levelカラムが追加されてることが確認できます。 さらに、このlevelカラムをUsersテーブルに追加します。

【作業ファイル:/app/User.php】

    protected $fillable = ['name', 'email', 'password'];
↓
    protected $fillable = ['name', 'email', 'password','level'];

次はシーディングをします。

■初めてのLARAVEL 5 : (13) SEEDING(ララ帳)
https://laravel10.wordpress.com/2015/03/05/%E5%88%9D%E3%82%81%E3%81%A6%E3%81%AElaravel-5-13-seeding/

まいどおなじみララ帳さんを参考にしつつ、
/database/seeds/DatabaseSeeder.phpを修正します。

<?php

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

use Illuminate\Support\Facades\DB;    //追加

use App\User;    //追加

class DatabaseSeeder extends Seeder {

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

        $this->call('UserTableSeeder');    //追加
    }
}

//追加ここから
class UserTableSeeder extends Seeder {

    public function run() {
        DB::table('users')->delete();

        //管理者
        User::create([
            'name' => 'admin',
            'email' => 'admin@abc.com',
            'password' => 'xxxxxx',
            'level' => 'admin',
        ]);

        //上級ユーザー
        User::create([
            'name' => 'manager',
            'email' => 'manager@abc.com',
            'password' => 'xxxxxx',
            'level' => 'manager',
        ]);

        //一般ユーザー
        User::create([
            'name' => 'normal',
            'email' => 'normal@abc.com',
            'password' => 'xxxxxx',
            'level' => 'normal',
        ]);
    }
}
//追加ここまで

パスワードは、暗号化されたものが必要なため、
・公開サイトで、/auth/register/からユーザー登録

・phpMyAdminでデータを取得しました。

というか、さくっと登録できるので、 そもそもシーディングの意味がない・・・と、 突っ込まれそうですが、気にしない。 これで、シーディングの準備完了。 さっそくSSHで接続し、シーディングを実行します。

php artisan db:seed

データベースを確認すると、無事3件追加されてました。
公開アドレス/home/からログインも、問題なくできました。
今回は、ここまで。

次回。 本アプリの仕様として、ユーザー登録は、アドミニストレーターが行う想定でいるので、以下の機能を実装します。

(1)ユーザーログイン画面から「ユーザー新規登録(Register)」を削除
(2)管理者権限でログインした時のみ、ユーザー新規登録への導線を表示
(3)ユーザー新規登録画面を表示するとき、ユーザー権限を確認して、管理者以外は見せないようにする。

を、やろうと思います。

コメントを残す

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