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

6
我在 Laravel 5.2 应用程序中有以下结构:
用户: id name ...
文章: id title body user_id (外键)
评论: id body user_id (外键) post_id (外键)
我想为每个用户创建一些帖子(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)
   );
});

注意:我将模型之间的关系描述如下: 用户拥有多个帖子, 用户拥有多个评论, 帖子拥有多个评论, 评论属于帖子, 评论属于用户。
1个回答

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,
            ]);
        });

    });

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


[ErrorException] Illuminate\Database\Eloquent\Builder::$orders 未定义的属性。 - Spidey
我改成了App\User::class,错误消失了。:)) 谢谢 - Spidey
很高兴能帮忙! :) - jakehallas
这将在同一用户的帖子中创建几条评论。但我想对于通用测试来说,只需使用数据填充数据库就可以了。 - lephleg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接