我正在为一个M:M关系做种子,我想在90%的情况下将1 Widget附加到WorkspaceItem,其他5% 2,最后5% 3。
$widgets = Widget::all();
$workspaceItems = WorkspaceItem::all();
foreach ($workspaceItems as $workspaceItem) {
$numberBetween = $faker->numberBetween(0, 100);
if ($numberBetween > 95) {
$widgetsToSeed = $widgets->random(3);
} else if ($numberBetween > 90 && $numberBetween <= 95) {
$widgetsToSeed = $widgets->random(2);
} else {
$widgetsToSeed = $widgets->random();
}
foreach ($widgetsToSeed as $widget) {
$workspaceItem->widgets()->attach($widget->id, [...]);
}
}注意事项:我不能使用sync(),因为我对透视表有额外的属性。
如果我是dd($widgetsToSeed),我确实会得到随机的小部件。但一旦它进入循环,而我dd($widget),我没有得到模型,但只有true。什么地方出问题了?
发布于 2020-08-03 10:28:00
我觉得你应该做的就是:
$workspaceItem->widgets()->saveMany($widgetsToSeed);这样,您甚至不需要最后一个foreach循环。要始终接收集合(即使只有一个元素),还可以在上一个random(1)语句中添加else。经过一些小小的简化,它看起来可能如下所示:
foreach ($workspaceItems as $workspaceItem) {
$numberBetween = $faker->numberBetween(0, 100);
if ($numberBetween > 95) {
$widgetsToSeed = $widgets->random(3);
} else if ($numberBetween > 90) {
$widgetsToSeed = $widgets->random(2);
} else {
$widgetsToSeed = $widgets->random(1);
}
$workspaceItem->widgets()->saveMany($widgetsToSeed);
}https://stackoverflow.com/questions/63227541
复制相似问题