Laravel 播种无效

Laravel Seeding not working

考虑以下代码:

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 我希望 的每个 迭代 的增量值从 1 到 100 =]外部foreach循环.

示例:

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

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

我试图在工厂之前声明 $i=1 然后用 each() 增加 $i 但它没有工作并给出 duplicate key error.

Note that the unique constraint in my table for employee is department-emp_id

这是一个棘手的问题。索引变量的值没有更新,因为当您将基元传递给 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.

上拼凑了一个小例子来展示不同之处