Laravel8からはFactoryとSeederを使って、ダミーデータを手軽に作れます。
普通の作り方と、リレーションが入った場合の応用編の作り方を紹介します。
本当に簡単で、びっくりします。
Laravel7との違いも最後にお伝えしますね。
Laravel8 FactoryとSeederでダミーデータを作る方法 基本編
まずはユーザーモデルを使った基本の作り方を紹介します。
① 日本語のダミーデータを作る設定にする
日本人の名前のダミーデータを作りたい場合は、最初にapp/config のapp.phpファイルの設定を変更しておきましょう。
109行目あたりの ‘faker_locale’ を ‘ja_JP’ としておきます。
1 |
'faker_locale' => 'ja_JP', |
なお 【locale】は ‘ja’ としますが、【faker_locale】はなぜか’ja_JP’ としないとダメみたいなので、注意してください^^;
②Seederファイルを編集する
次にdatabase/seeders のDatabaseSeeder.phpファイルを開きます。
デフォルトで下記のように入っています。
ユーザーモデルを10個作る、という意味ですが、とりあえずこれでOKとします。
③ Seedコマンドを実行
下記のコマンドを実行します。
1 |
php artisan db:seed |
これで完了です。
データベースには日本名のダミーデータが10個作られています。
なんだか、本当にありそうな名前ばかりですね^^;
Laravel8 FactoryとSeederでダミーデータを作る方法 応用編
次に応用編を解説します。
リレーションがあるときや、ダミーデータの型を指定したいときには、ファクトリーファイルを編集していきましょう。
①ファクトリーファイルを作成する
php artisan make:factory を実行します。
1 |
php artisan make:factory InquiryFactory --model=Inquiry |
ファクトリーの名前はお好きなものにしてください。
最後にモデル名も入れておくと、あらかじめモデル名が設定されているので便利です。
② ダミーデータ用にカラム情報を登録する
①を実行すると、database/factories の中にできたファクトリーファイルができます。
ファイルの中に、ダミーデータを作るカラム情報を登録しましょう。
たとえば件名と投稿という3つのカラムであれば、次のようにします。
1 2 3 4 |
return [ 'title'=>$this->faker->text, 'body'=>$this->faker->text, ]; |
ダミーデータのデータタイプ
faker->の後は、入れたいデータの種類によって変えてください。
次の表によく使うデータタイプをまとめたので、参考にしてください。
【fakerが作成するデータタイプ】
データ タイプ | faker データ型 | 作成される ダミーデータ例 |
---|---|---|
人の名前 | name | Adeline Rippin |
住所 | address | Rippin 34688 Kim Glens New Linnie, MI 66103 |
文書 | text | Et occaecati aut assumenda a. Et consequatur volup… |
文字数指定文書 | text($maxNbChars = 100) | |
ランダムな1桁数字 | randomDigit | 6 |
範囲指定数字 | numberBetween($min=100, $max=1000) | 136 |
電話番号 | phoneNumber | (747) 693-2704 x645 |
メールアドレス | libby71@gmail.com |
文字数制限
入れるデータに文字数制限をつけるには、カッコで文字数をいれます。
1 2 3 4 |
return [ 'title'=>$this->faker->text(20), 'body'=>$this->faker->text(50), ]; |
belongsToリレーション
リレーションを付けたデータを入れることも可能。
たとえば user_id カラムのデータを入れる場合、ファイルの先頭にモデル名を指定しておきます。
カラム情報は User::factory()とします。
1 |
use App\Models\User; |
1 2 3 4 5 |
return [ 'user_id'=>User::factory(), 'title'=>$this->faker->text(20), 'body'=>$this->faker->text(50), ]; |
③ Seederを作成する
database/seeders の中のDatabaseSeeder.phpファイルを開きます。
デフォルトでユーザーモデルのダミーデータを10個作る設定が入っています。
作成するモデルとダミーデータ数に合わせて、public function run() の後を変更します。
たとえばInquiryモデルのダミーデータを5個作るなら、下記のようになります。
1 2 3 4 |
public function run() { \App\Models\Inquiry::factory(5)->create(); } |
④ seedコマンドを入力
下記コマンドを実行すれば、ダミーデータ作成完了です。
1 |
php artisan db:seed |
こんな感じの日本人名と件名、投稿内容入りデータが入りました。
ちょこっと追記 Laravel7までの機能との比較
Laravel8より前から、このFactory機能とSeeder機能はありました。
ただ、もう少し面倒だったのです。
Laravel8では、デフォルトでモデルファイルにHasFactoryが設定されています。
このため、今回の記事の前半でご紹介したように、ほとんど何もせずに最初からダミーデータを実行できてしまいます。
またSeederファイルにいれるコードも、Laravel8は分かりやすくなっています。
なおLaravel8で以前のファクトリー機能を使いたい場合には、laravel/legacy-factoriesパッケージを使う必要があります。
さいごに
Laravelの基本的な使い方、他にも色々ご紹介しています。
下記から、他の記事もチェックしてみてくださいね♪
ポイント
・絶対入れなければいけない値を設定している場合は、その値をいれておきましょう。
・idやtimestumpは自動で入るので、入れなくても大丈夫です。