laravel5.1のseed(テーブルの初期レコード設定)をFaker(テストデータ自動生成ライブラリ)で作ってみる
laravelでは、テーブル作成だけではなく初期レコード(Usersテーブルにrootユーザ・レコードとか)をINSERTIONするSEED機能があります。
以下のコマンドを叩けば実行されます
php artisan db:seed
※初期では何も設定されていないので、変化なし
ISNERTするレコードの定義は、以下のファイルに定義します。
project_name/database/seeds/DatabaseSeeder.php
Usersテーブルが最初からあるので、SEED(INSERTするレコード)を定義してみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
<?php use Illuminate\Database\Seeder; use Illuminate\Database\Eloquent\Model; // INSRETする対象クラスを指定する // project_nameからのパス(名前空間)、頭が大文字になる事に注意! use App\User; class DatabaseSeeder extends Seeder { public function run() { // EloquentのマスアサインメントをOFFにしている。 // マスアサインメント = 指定したフィールド以外は格納出来なくする機能 Model::unguard(); // $this->call(UserTableSeeder::class); $this->call('UserTableSeeder'); // php artisan db:seedで実行される Model::reguard(); } } // ココからは新規追加(Usersテーブルのフィールドに合わせて作成する class UserTableSeeder extends Seeder { public function run() { // 初期データなので全消し(既存データがあったら消える) DB::table('users')->delete(); // Faker(テストデータ生成ライブラリ)も、標準でLaravelに組込済 // https://github.com/fzaninotto/Faker // 日本語データを指定 $faker = Faker\Factory::create('ja_JP'); $gender = ['男','女']; // 10ユーザまとめて生成 for($i=0; $i<10; $i++) { // ユーザ生成 User::create( array( 'name'=>$faker->userName(), // パスワードはハッシュ化して格納する 'password' => Hash::make($faker->password()) 'email'=>$faker->email(), // Usersテーブルに独自フィールドを追加したら、ココで設定できる // Model::unguard()しているので、全フィールドに格納可 'gender'=> $faker->randomElement($gender), 'address'=> $faker->address(), 'birthday'=>$faker->dateTimeThisCentury->format('Y-m-d') ) ); } } } |
問題がなければ、phpMyAdminなどでレコード挿入が確認できるはずです。
php artisan db:seed
Seeded: UserTableSeeder
Faker参考URL:Faker@PHPでダミーデータを作る