【问题标题】:Laravel - Factory seeding unique data on pivot tableLaravel - 工厂在数据透视表上播种唯一数据
【发布时间】:2021-06-11 10:39:21
【问题描述】:
Event::factory(5)
    ->hasAttached(
        Team::factory()->count($this->faker()->numberBetween(0, 60)),
        [
            'team_name' => $this->faker()->unique()->name,
            'score' => $this->faker()->numberBetween(0, 50)
        ],
        'participants'
    )
    ->create([
        'user_id' => $user,
        'quiz_id' => $quiz
    ]);

上面的sn-p代码使用$quiz$user创建了5个事件。它将有一个随机数量的participants,这是一个数据透视表(TeamEvent)。在该数据透视表上有一个 team_namescore 列。因为团队可以更改他们的团队名称,所以我们想知道参与时的团队名称以及他们在比赛中获得的分数。

使用当前代码,因为 $this->faker()->numberBetween(0, 60)$this->faker()->unique()->name$this->faker()->numberBetween(0, 50) 不在迭代内进行评估,所以所有数据透视表数据都是相同的。

如何使这些数据在每个数据透视行中有所不同?

TIA

【问题讨论】:

    标签: laravel


    【解决方案1】:

    想通了;

    Event::factory(5)
        ->hasAttached(
            Team::factory()->count($this->faker()->numberBetween(0, 60)),
            function() {
                return [
                    'team_name' => $this->faker()->unique()->name,
                    'score' => $this->faker()->numberBetween(0, 50)
                ];
            },
            'participants'
        )
        ->create([
            'user_id' => $user,
            'quiz_id' => $quiz
        ]);
    

    【讨论】:

      猜你喜欢
      • 2017-02-10
      • 2016-12-06
      • 1970-01-01
      • 2020-08-04
      • 2017-09-19
      • 1970-01-01
      • 1970-01-01
      • 2019-02-13
      • 1970-01-01
      相关资源
      最近更新 更多