考虑以下代码:
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
答案 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的差异。