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

时间:2016-01-23 13:50:19

标签: php laravel model factory

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

用户: ID 名称 ...

发表: ID 标题 身体 user_id(fk)

注释: ID 身体 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();
});

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

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

注意:我建立了这样的模型之间的关系: 用户有很多帖子, 用户有很多评论, 发表有很多评论, 评论belongsTo Post, 评论belongsTo用户

1 个答案:

答案 0 :(得分:1)

您可以通过使用工厂为下一个孩子筑巢等来实现这一目标。

您有一些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

中设置的值