Laravelで開発する際、ローカル環境にテスト用のダミーデータを作りたい時があります。
そんな時はSeeder機能でダミーデータを作ることができます。
また、Seederは1個ずつテストデータを作成していく煩わしさがありますが、一気に大量にダミーデータを作りたい時はFactoryという機能を使用できるので合わせて解説していきます!
*今回はusersテーブルとusermodelファイルが事前に準備されている前提で解説します!
目次
SeederとFactoryについて
SeederファイルとFactoryファイルはローカル環境開発で必ず使用するスキルですので、初学者はマスターしちゃいましょう。
Seederについて
SeederクラスはダミーデータをDBに一括で保存する仕組みのことです。
例えば、以下のようにLaravelプロジェクト直下のdatabase/seeds/フォルダ内のSeederファイルに任意のダミーデータを作ることができます。
1 2 3 4 5 6 7 8 |
public function run() { DB::table('users')->insert([ 'name' => 山田, 'email' => Yamada@gmail.com', 'password' => yamada2019, ]); } |
ここではusersテーブルに
name:山田、
メール:Yamada@gmail.com、
パスワード:yamada2019
というデータを作成します。
Seedingについては、無数にこのようなダミーデータを作成することができます!
でも、毎回このように自分でカラム名などをランダムに設定するのって面倒ですよね?
そんなときにFactoryの機能を使いましょう!
Factoryについて
Factoryは大量のテスト用データをDBに生成することができます!
Factoryファイルに以下のように記述します。
1 2 3 4 5 6 7 |
$factory->define(App\User::class, function (Faker $faker) { return [ 'name' => $faker->name, 'email' => $faker->unique()->safeEmail, //ユニークなemail 'password' => Hash::make('testtest'), ]; }); |
$faker->name:山田太郎、佐藤花子などの存在しそうな名前をランダムに生成
$faker->unique()->safeEmail:Yamada@gmail.comなどのランダムかつユニークなデータを生成
Hash::make(‘test’):ハッシュ化されたパスワードを生成
Seederファイルを生成してみる!
では、実際にSeederファイルを生成してみましょう!
Artisanコマンドでファイルを生成
1 |
php artisan make:seeder UsersTableSeeder |
これで、Laravelプロジェクト/database/Seedsディレクトリ内にUsersTableSeederファイルが生成されます!
デフォルトではこんな感じのファイルが出来上がります!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<?php use Illuminate\Database\Seeder; class UsersTableSeeder extends Seeder { /** * Run the database seeds. * * @return void */ public function run() { // } } |
ここから追加実装していきます!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
<?php use Illuminate\Database\Seeder; use Faker/Factory as Faker; //追加 class UsersTableSeeder extends Seeder { /** * Run the database seeds. * * @return void */ public function run() { // 追加 factory(App\User::class, 50)->create()->each(function ($user) { //50件のデータを作成 $user->posts()->save(factory(App\Post::class)->make()); }); // ここまで } } |
Seederファイルの編集はここまでで、次はFactoryファイルを編集します!
ちなみにここでは、Factoryファイルで指定したダミーデータを50件作りますよという処理を書いています。
Factoryファイルを生成する
ではFactoryファイルを生成しましょう!
Factoryファイルはlaravelプロジェクト配下のdatabase/factoriesディレクトリ内に配置します。
Factoryファイルを作成する特定のコマンドはないので、自分で作りましょう!
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<?php use Faker\Generator as Faker; $factory->define(App\User::class, function (Faker $faker) { static $password; return [ 'name' => $faker->name, 'email' => $faker->unique()->safeEmail, 'password' => $faker->password, ]; }); |
これで、ランダムなname、email、passwordが50件生成されます!
Factoryファイルの設定は簡単ですね。
Seederを実行する!
SeederファイルとFactoryファイルを編集すれば、あとはSeederを実行するだけです。
App/database/seeds/DatabaseSeeder.phpに実行したいSederファイルを追加します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<?php use Illuminate\Database\Seeder; class DatabaseSeeder extends Seeder { /** * Seed the application's database. * * @return void */ public function run() { // $this->call(UsersTableSeeder::class); UsersTableSeeder::class; //追加 } } |
オートローダーを再生成する
以下を実行します。
忘れがちですが、追加したSeederがある場合は必ず実行する必要のあるコマンドです。
1 |
composer dump-autoload |
Seederを実行
これでSeederファイルが実行されます。
1 |
php artisan db:seed |
未経験から現場に入れば、テストを担当する機会が多いと思います。
是非、テスト用にダミーデータの生成方法を覚えちゃいましょう!
今回はここまでにします!
コメントを残す