模型工厂与现有模型的关联


Model Factory association with existing models

我的Laravel 5.2应用程序中有以下结构:

用户:编号名字...

发布:编号标题身体user_id (FK)

评论:编号身体user_id (斐济)post_id (FK)

我想创建几个用户(20),为每个用户随机数量的帖子,对每个帖子,随机数量的评论(即使是固定数量也可以)。

我可以创建用户并为每个帖子分配帖子,但无法为每个帖子分配评论:我有这个:

factory(App'User::class, 20)->create()->each(function($u) {
   $u->posts()->saveMany(factory(App'Post::class, 5)->make();
});

我发现了一些东西但没有工作:

factory(App'Comment::class, 100)->create()->each(function($u) {
   $u->user()->sync(
      App'User::all()->random(3)
   );
});

注意:我使模型之间的关系是这样的:用户有很多帖子,用户有很多评论,帖子有很多评论,评论属于发布,评论属于用户

你可以通过使用你的工厂来嵌套你的下一个孩子等来实现这一点。

您具有某些fk引用的关系,因此要获得正确的"fk"值,您可以执行以下操作:

factory('App'Users', 123)->create()->each(function ($u) {
        factory('App'Posts', 1)->create([
            'user_id' => $u->id,
        ])->each(function ($e) use ($u) {
            factory('App'Comments', 10)->create([
                'user_id' => $u->id,
                'post_id' => $e->id,
            ]);
        });
    });

create 方法中的数组将覆盖ModelFactory.php中设置的值