Laravel foreaching 随机模型
Laravel foreaching random models
我正在为 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()
,因为我有其他的枢轴属性table。
如果我dd($widgetsToSeed)
,我确实会得到随机的小部件。但是一旦它进入循环,我 dd($widget)
我就没有得到模型,而只是 true
。好像是什么问题?
我认为你应该可以做到:
$workspaceItem->widgets()->saveMany($widgetsToSeed);
这样你甚至不需要最后一个 foreach
循环。要始终接收一个集合(即使只有一个元素),您还可以在最后一个 else
语句中添加 random(1)
。通过一些小的简化,它可能看起来像这样:
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);
}
我正在为 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()
,因为我有其他的枢轴属性table。
如果我dd($widgetsToSeed)
,我确实会得到随机的小部件。但是一旦它进入循环,我 dd($widget)
我就没有得到模型,而只是 true
。好像是什么问题?
我认为你应该可以做到:
$workspaceItem->widgets()->saveMany($widgetsToSeed);
这样你甚至不需要最后一个 foreach
循环。要始终接收一个集合(即使只有一个元素),您还可以在最后一个 else
语句中添加 random(1)
。通过一些小的简化,它可能看起来像这样:
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);
}