最近、モデルファクトリとFakerを使用してLaravelシードを使用してデータベースをシードしようとしています。不要なモデルを作成せずに、モデルファクトリ、1対1および1対多の関係でLaravel外部キーを定義する
シンプルなスキーマの場合、それを動作させるのは簡単です:)。しかし外部キーとテーブルの関係を伴う複雑なDBスキーマで作業する場合、私はいくつかの問題が発生した:
- 一つ一つ
- に1を多く
- 多くに多くの
へ...リンクに記載されているように: Laravel 5.1 foreign keys in model factory。このトピックで
、official documentationは、このようなデータベースの種を実行することを提案:
public function run()
{
factory(App\User::class, 50)->create()->each(function ($u) {
$u->posts()->save(factory(App\Post::class)->make());
});
}
を...しかし、この解決策の一つの問題があります:多くのDBテーブルで作業し、多くの種を実行している(とはそれらの間の多くの関係)、それは多くの不要なモデルを作成するに共通していますこの方法を使用します。たとえば、上記の例の前にPostsTableSeeder.phpを実行した場合、それらの投稿はすべてユーザーにリンクされず、テストや開発には使用されません。
このような状況に対処するために、私は私のために機能し、それらの孤立したモデルの不必要な作成を避ける機能的なソリューションに出てきました...
そして私は誰とも共有したいので、答えは:)。
例が扱っ:だからここ
多くの関係?私はUser_Casesテーブルを持つユーザとケースを持っていて、多対多の問題を解決しています。私は、私のDBをシードするための工場を作成しようとしています。 – Kenilik
私は、工場ではなくシーダーの中で**多対多**アプローチを取得します。シードャーでは、両方のモデル(*ユーザー*と*ケース*)を取得して、いずれの場合も、 – andcl