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

通过laravel中的关系使用两个外键进行播种

秦钟展
2023-03-14

我有表用户帖子评论,一个用户有很多帖子,每个帖子有很多评论(post_id在评论表中),还有一个用户有很多评论,但不完全需要匿名用户(user_id在评论表中),下面的代码为每个帖子播种一些评论,但user_id从不由评论的所有者填写。我希望评论有相关的user_id注入数组外面$factory-

**CommentFactory.php**   

$factory->define(App\Contact::class, function (Faker $faker) {
return [
        // 'user_id' => $faker->randomElement([null, rand(0, 9)]), 
        'name' => $faker->name,
        'email' => $faker->unique()->safeEmail,
        'contact' => $faker->phoneNumber,
        'website' => $faker->domainName,
        'subject' => $faker->sentence(),
        'message' => $faker->paragraph(5),
    ];
});

**UserSeeder.php**

factory(App\User::class, 10)->create()->each(function ($user) {
   $user->posts()->saveMany(factory(App\Post::class, rand(2, 10))->make());
   $user->posts->each(function ($post) use ($user) {    
      // how to inject user_id value from here (comment factory)
      $post->comments()->saveMany(factory(App\Comment::class, rand(2, 10))->make());
   });
});

共有1个答案

林俊晖
2023-03-14

可以将属性/值数组传递到make方法:

factory(App\Comment::class, rand(2, 10))->make(['user_id'=>$user->id]);

编辑:只需迭代注释并分配一个随机用户id:

factory(App\Comment::class, rand(2, 10))->create()->each(function($comment){
   $comment->update(['user_id'=>\App\User::all()->random()->id]);
}); 

如果您希望有随机匿名评论者:

factory(App\Comment::class, rand(2, 10))->create()->each(function($comment){
   // pick either a random user_id or null;
   $userId=array_random(\App\User::all()->random()->id, null);
   $comment->update(['user_id'=>$userId]);
});
 类似资料:
  • 我们系统的所有用户都来自一个主“用户”类。同样,我们希望以相同的方式构造数据库,拥有一个主“用户”表,该表与特定用户类型的必要表连接,以提供额外的用户信息。 以这三个基本表格为例: 表用户 user_id|user_email|user_firstname|user_lastname|... 表雇员 user_id|employee_staff_number|... 表管理 user_id|adm

  • 问题内容: 我是RestKit的新手,正在挣扎。 JSON: 核心数据: 我的应用程序逻辑如下所示: 我一生都无法解决如何使RestKit填充用户对象的团队Property的问题。 我看过这么多帖子,但是我没有尝试,这不是通常的用例吗? 有谁知道该怎么做,帮助将不胜感激! 谢谢。 问题答案: 您需要向持有关联的实体添加一个临时属性。这需要添加到您的中。 然后,您需要为您添加一个关系定义: 这将为R

  • 我如何才能做到这一点,使我的A实体仅由B的外键持久化?也就是说,只有外键被插入到数据库中(因为B是一个主表,所以我不需要插入元素)。

  • 我有3个模型在我的项目: 用户型号代码: 职业标准守则 迁移: 用户职业模型代码 迁移: 当我尝试这个代码时,我通过他的名字搜索用户,并得到职业名称,然后计算该职业的用户。 代码: 我收到错误消息: 照明\数据库\查询异常:SQLSTATE[23000]:完整性约束违反:1052列'id'在其中子句是含糊不清的(SQL:选择*从存在的职业(选择*从用户内连接user_professionsuser

  • 在Laravel 5.1中,我可以看到表列关系可以通过两种方式设置: 1) 在迁移表中定义外键。 2)定义模型中的雄辩关系。 我已经阅读了文件,我仍然对以下内容感到困惑: > 我是需要同时使用这两个还是只需要1个? 两者同时使用有错吗?还是让它变得多余或者引起冲突? 使用有说服力的关系而不在迁移列中提及外键有什么好处? 有什么区别? 这些是我现在掌握的密码。我仍然不清楚是否需要删除迁移文件中设置的

  • 我试图在laravel中创建一个主键-外键关系,但我一直遇到这个错误 我似乎找不到哪里出错了,因为我在查看了SO上的其他答案后,对模式进行了更改。 当我运行时,上面的错误会弹出,这是一个部分迁移。 任何指向这将是真棒,因为我已经寻找了一段时间的解决方案! 谢谢 员工表 部门表 工资表 新增:DB播种机。 根据评论更改了DB种子程序