Nor*_*gul 3 php database seed laravel laravel-7
我对A M使播种机:M的关系,我想1安装Widget到WorkspaceItem90%的情况下,其他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, [...]);
}
}
Run Code Online (Sandbox Code Playgroud)
注意:我无法使用,sync()因为我有数据透视表的附加属性。
如果 I dd($widgetsToSeed),我确实会得到随机小部件。但是一旦它进入循环,dd($widget)我就没有得到模型,而只是true. 似乎是什么问题?
我认为你应该能够做到:
$workspaceItem->widgets()->saveMany($widgetsToSeed);
Run Code Online (Sandbox Code Playgroud)
这样你甚至不需要最后一个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);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
53 次 |
| 最近记录: |