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

Spi*_*dey 6 php factory model laravel

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

用户: id 姓名...

帖子:id 标题正文 user_id (fk)

评论:id body user_id (fk) post_id (fk)

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

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

factory(App\User::class, 20)->create()->each(function($u) {
   $u->posts()->saveMany(factory(App\Post::class, 5)->make();
});
Run Code Online (Sandbox Code Playgroud)

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

factory(App\Comment::class, 100)->create()->each(function($u) {
   $u->user()->sync(
      App\User::all()->random(3)
   );
});
Run Code Online (Sandbox Code Playgroud)

注意:我在模型之间建立了这样的关系:用户有很多帖子,用户有很多评论,帖子有很多评论,评论属于帖子,评论属于用户

jak*_*las 4

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

您具有被某些人引用的关系,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,
            ]);
        });

    });
Run Code Online (Sandbox Code Playgroud)

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