Laravelのfactoryで複数の関係のあるテーブルの作成(ダミーデータ投入)

 今回はlaravelでのダミーデータを作る時にちょっと役にたった書き方があったので簡単にメモとしての投稿。

 たとえば、User->Post->Commentのような3階層構造のリレーションモデルを作る時です。

 まずシンプルに3階層構造のリレーションモデルの作り方としては以下のコードで作成できます。

スクリーンショット 2020-07-12 15.53.09

 結構シンプルな実装がされていて可読性も高いです。

 ちょっと応用として上記のコードは3階層構造のリレーションモデルを作成するコードになりますが、例えばリレーションはしていないけど一緒にダミーデータを作成したいという場合はどのように書けばいいのだろうか。

 作りたい形はこんな感じ(Book->Stock, Book->Rental)
BookはStockとリレーションし、Rentalともリレーションしています。
 Bookは本、Stockは本の貸出可能在庫、Rentalはレンタル履歴のデータが入っている場合に、本をあるユーザーがレンタルしたら、Rentalにレコードが入りStockの値がそれに応じて変化するというデータを作成。

実際に書いたコードがこれ

スクリーンショット 2020-07-12 23.55.02

 上記のコードはBooksテーブルを作成し、eachの中で紐づいているRentalsテーブルを作成してます。
 これはさっきのコードとおんなじ。
Booksテーブルとのリレーションした状態でRentalsテーブルとリレーションしていないデーブルを作成するときは簡単で、Bookのeach内でRentalのファクトリーの隣にStockのファクトリーで作成するだけでおっけいです。

実際のコードはもう少し複雑ですが、今回はこんな書き方でダミーデータを作成できるよってことで簡単に残しておきました。

今回は短いですけどここまで。
お疲れ自分。


この記事が気に入ったらサポートをしてみませんか?