laravel7で、seeder + factory + fakerを使ってサンプル掲示板レコードを作る。user, post, replyテーブルに予めレコードを挿入してみた。

laravel7で、seeder + factory + fakerを使ってサンプル掲示板レコードを作る。user, post, replyテーブルに予めレコードを挿入してみた。

// 用語
seeder(種まき機) = 各テーブルのレコードを自動生成する。
factory(工場) = 同じレコードを指定された数だけ大量生産する。fakerを使えばランダム値のレコード生成できる
faker(偽物屋) = 名前やメアドなどランダム値を生成。日本語は名前や住所など限定的。realtextは日本語文章の断片を取得する

// 何をやるのか?
0, サンプル掲示板を作る。user, post, replyテーブルに予めレコードを挿入しておきたい。
1, 人間的発想だと、親user -> 子post -> 孫replyという順番で生成したいが
親reply(->子user) -> 子post -> 孫userという順番で生成した方がリレーション的に簡単。
2, userテーブルは最初からあるので、投稿テーブルと返信テーブルを作成

3, database/seeds/DatabaseSeeder.phpで、どのSeederを使うか指定する。親となるReplySeederを指定

4, database/seeds/ReplySeeder.phpでは、生成するモデル(App/Reply)とレコード数を指定。

5, database/factories/ReplyFactory.phpで、生成するレコードの値を指定。

6, database/factories/PostFactory.phpで、投稿レコードの値を指定。
fakerの日本語文章だと、意味不明なので、適当な日本語を自作してランダム出力する。

※userのfactoryは最初からある。

7, php artisan migrate:fresh –seed でテーブルとレコードを自動生成する。
親子関係のあるテーブルでも、自動生成出来るのは知っていたけど、親子孫の順番を逆にした方が関連性を気にせずにバンバン作れて良い気もするね。
実際に使う時は、PostモデルにhasmanyでReplyを保持させるのが楽でいい。

8, 人間的感覚に従ってuser->post->replyの順に生成すると、こうなる。
コーディング的には、ややこしくなるな・・・。