当前位置: 首页 > 知识库问答 >
问题:

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

颜河
2023-03-14

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

用户:id名称。。。

文章: id标题正文user_id(fk)

注释:id主体用户id(fk)发布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)
   );
});

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

共有1个答案

夏经武
2023-03-14

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

您有一些被某些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,
            ]);
        });

    });

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

 类似资料:
  • 问题内容: 我希望返回具有适当泛型的用户界面实例。我陷入下面的错误示例中: 绑定不匹配:BallUserInterfaceFactory类型的通用方法getBaseballUserInterface(BASEBALL)不适用于参数(BALL)。推断的类型BALL不能有效替代有界参数 我了解它不能保证BALL是棒球,因此getBaseballUserInterface方法调用上存在参数类型不匹配的情

  • 我试图测试代码的特定部分,但模型类的某些依赖性使得此测试非常难以执行。如果这些依赖关系在注入的类上,我可以轻松地模拟该类。当来自工厂的数据库关系时,是否可以执行类似的操作?我正在将这个想法转化为Laravel文档中的示例,以便更容易举例说明: 假设我正在测试一个控制器,它将为用户的帖子创建注释。我将使用一个工厂来创建用户和post,并对route/api/comments执行测试post调用,此p

  • 我有以下问题,我有2个模型:客户端 和性别: 我的ClientController: 但我又想到了以下几点: 节点./bin/www OBS:在与透视表的N:m关系中,一切正常,有人能帮我吗?

  • 我使用下面的代码创建了20篇帖子,每个帖子都有3条评论。 相反,我想创建20个帖子,每个帖子都有随机数量的评论(例如,帖子1有2个评论,帖子2有4个评论,等等)。) 这不起作用,每个帖子都有相同(随机)数量的评论。 我怎样才能做到这一点?

  • 如何在模型工厂中定义外键。例如,如果我有一个Organizations表,其中包含国家/地区表的外键,那么在我的模型工厂中,我必须为国家/地区id定义一个虚拟值,如下所示: 在我的Organizations table seeder类中,我正在执行以下操作,但faker对象不存在-我是否需要在我的seeder类中创建一个新的faker对象? 数据库播种器类 定义模型工厂时定义外键的最佳方法是什么?

  • 这是: 因此,其思想是函数返回的一个实例,然后可以将该实例传递给函数。 工厂看起来是这样的(不编译): 非常感谢任何帮助。