Webアプリを作成するとき、本番前に色々テストするために、ダミーデータが必要になることもありますよね。
Laravelには、Seederという手軽にダミーデータを作成できる機能が備わっています。
今回は色々なダミーデータの作り方をマスターしましょう。
本記事はLaravel7についての解説です。
モデルファイルの場所や指定方法がLaravel8と異なることがあります。
たとえば、Laravel7で下記のように指定してある部分があるとします。
Laravel8については、こちらの記事もご覧ください。
LaravelのSeederで1個ずつダミーユーザーを作る方法
ダミーデータを作る方法を3個、順番に解説していきます。
ちなみにseedとは【種】の意味で、seederとは【種をまく】という意味。
ばばっと種をまくように、データを作っていくイメージがわきますね。
では、まずは基本の方法を解説していきます。
①Seederファイルを編集する
Laravelをインストールしたフォルダの app/database/seeds フォルダにDatabaseSeeder.phpが入っています。
このファイルを開きます。
次のコードを追加します。
1 2 3 4 5 |
DB::table('users')->insert([ 'name'=>Str::random(10), 'email'=>Str::random(10).'@test', 'password'=>Hash::make('password') ]); |
ユーザーテーブル内のカラムに入れる条件をひとつずつ指定しています。
入力後のファイルは、次のようになります。
②Seedを実行する
下記のコマンドを入力します。
1 |
php artisan db:seed |
【Database seeding completed successfully】というコマンドが返ってきたら成功。
データベース上にダミーユーザーが登録されているはずなので、チェックしてみてください。
LaravelのSeederで一気にダミーデータを作る方法
ダミーデータを作るときって、一気に作成したいことも多いですよね。
Laravelの【factory】を使えば、何個でも、一気にデータを作れます。
factoryとは、工場といった意味。
1粒ずつ種をまかず、工場で一気にデータを作ってしまうようなイメージですね。
①factoryファイルを編集する
Laravelをインストールしたフォルダの app/database/factories フォルダにUserFactory.phpが入っています。
このファイルを開きます。
既に次のようなユーザーテーブル用データが入っています。
1 2 3 4 5 6 7 8 9 |
$factory->define(User::class, function (Faker $faker) { return [ 'name' => $faker->name, 'email' => $faker->unique()->safeEmail, 'email_verified_at' => now(), 'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', // password 'remember_token' => Str::random(10), ]; }); |
ユーザーテーブルをデフォルト状態から変更していなければ、このままの情報を使います。
もしカラムを追加した場合には、追加カラムの情報を書き加えておきましょう。
③そのほかのテーブルの情報も追加する
ユーザーテーブルだけでなく、他のテーブルのデータも作成したい場合には、テーブルの情報をUserFactory.phpファイルに追加します。
たとえば次のようなポストテーブルを追加したい場合。
UserFactory.phpファイルの先頭に、下記を加えておきます。
1 |
use App\Post; |
さらにユーザーテーブルに関するデータの後に、下記のように書いておきます。
1 2 3 4 5 6 |
$factory->define(Post::class, function (Faker $faker) { return [ 'user_id' => $faker->numberBetween(1,3), 'title' => $faker->sentence(7,11), 'body' => $faker->sentence(7,11), ]; |
なお、$fakerの後には、どんな種類のフェイクデータを入れるか指定しています。
データの種類は、下記サイトから見つけられます。
④Seederファイルを編集する
Laravelをインストールしたフォルダの app/database/seeds フォルダにDatabaseSeeder.phpが入っています。
このファイルを開きます。
次のコードを入力します。
1 2 |
factory(App\User::class, 10)->create(); factory(App\Post::class, 10)->create(); |
これで、ユーザーテーブルとポストテーブルに、10個ずつダミーデータが追加されます。
この数字は、お好みで変更してください。
⑤Seedを実行する
下記のコマンドを入力します。
1 |
php artisan db:seed |
【Database seeding completed successfully】というコマンドが返ってきたら成功。
データベース上にダミーユーザーが登録されているはずなので、チェックしてみてください。
LaravelのSeederでリレーション付きのダミーデータを作る方法
テーブルの間でリレーションがある場合には、できればリレーション付きでダミーデータを作りたいですよね。
たとえば、ユーザーテーブルのidと、ポストテーブルのuser_idが hasManyで連携しているとき。
ポストテーブルのuser_idは、ユーザーテーブルのidのどれかが割り振られるはずです。
ダミーデータでも、このリレーションどおりにダミーデータを作成する方法を2つ紹介します。
方法①factoryファイルで設定する
ファクトリーファイルを開きます。
下記は、Postテーブルのダミーデータを作成するための情報です。
user_idカラムを次のように記述すれば、リレーションができます。
1 2 3 4 5 6 |
$factory->define(Post::class, function (Faker $faker) { return [ 'user_id' => factory(App\User::class), 'title' => $faker->sentence(7,11), 'body' => $faker->sentence(7,11), ]; |
実行すると、ポストテーブルとユーザーテーブルのダミーデータを同時に作ることができます。
方法②Seederファイルで設定する
Laravelをインストールしたフォルダの app/database/seeds フォルダのDatabaseSeeder.phpファイルを開きます。
次のコードを入力します。
1 2 3 |
factory(App\User::class, 10)->create()->each(function ($user){ $user->posts()->save(factory(App\Post::class)->make()); }); |
データを一括削除しながらダミーデータを作る方法
seeder機能は便利ながら、一気にデータが作れるので、削除するのも大変ですよね。
一気に削除したい場合は、truncateを使えば、一括削除ができます。
1 2 |
App\Post::truncate(); App\User::truncate(); |
削除したいテーブルを示すモデルのtruncate() メソッドを呼び出しましょう。
なおtruncateを実行すると、既存のデータも一気に消えてしまいますし、やり直しも効きません。
使う前には、十分に注意してくださいね。
truncateは、切り取る、切り詰めるといった意味があります。
もし古いダミーデータを削除しながら、新しいダミーデータを作成したいときには、truncateをcreate文の前に入れておきましょう。
次のような感じです。
このあとにphp artisan db:seedを実行すると、古いデータを削除した後、新しいダミーデータが作成されます。
新しくファイルを作成してダミーデータを作る場合
今回は、既存のファイルを使ってダミーデータを作りました。
もし新しくファクトリーファイルを作成したい場合には、下記のコマンドを使います。
1 |
php artisan make:factory ファクトリー名 --model=モデル名 |
database/factories フォルダの中に、新たにファクトリーファイルが作成されます。
上記記事を参考に、各カラムの情報を入力してください。
次に app/database/seeds フォルダのDatabaseSeeder.phpファイルに、作成したいダミーデータの数を指定します。
1 |
factory(App\モデル名::class,10)->create(); |
seedを実行します。
1 |
php artisan db:seed |
さいごに
今回のまとめ
- seedを使うと、ダミーデータを手軽に作成できる
- factoryを使ってseedを行うと、一気に複数のダミーデータを作成できる
- リレーションを反映したダミーデータを作成することも可能
- ダミーデータを一括削除するにはtruncateが便利だが、削除したら戻らないので要注意
100個、1000個のデータが入ると、システムがどんなふうに動くか。
こんな実験もseedを使うと簡単にできてしまいますね。