Laravel播种不起作用

时间:2018-06-16 18:42:47

标签: php laravel-5 laravel-seeding

考虑以下代码:

foreach ($departments as $department)
        {
            factory(App\User::class, 100)->create()
            ->each(function ($u) use($department)
            {

                $u->employee()->save(factory(App\Employee::class)->make([
                    'department' => $department,
                    'emp_id' => '',
                ]));

            });

        }

现在emp_id我希望外部foreach循环的迭代 1到100 增量值

示例:

第一次迭代应创建100个用户和100个员工记录,其中emp_id为1到100,部门为“abc”

第二次迭代再次创建100个用户和100个员工记录,使用emp_id 1到100,部门为'xyz' 等等。

我尝试在工厂之前宣布$ i = 1,然后使用each()增加$ i但是它不起作用并且给了duplicate key error

  

请注意,我的员工表中的唯一约束是   部门-EMP_ID

1 个答案:

答案 0 :(得分:1)

这是一个棘手的问题。索引变量的值不会更新,因为当您将基元传递给use子句中的函数时,它们会被复制。默认情况下,只有对象通过引用传递。

要解决此问题,您需要通过预先添加&来明确地将索引变量作为参考传递:

foreach ($departments as $department)
{
    $i = 1;
    factory(App\User::class, 100)->create()
        ->each(function ($u) use ($department, &$i)
        {
            $u->employee()->save(factory(App\Employee::class)->make([
                'department' => $department,
                'emp_id' => $i++,
            ]));
        });
}

我将一个小例子拼凑在一起,以显示3v4l的差异。