如何在 laravel 8 中使用不同的数据透视表播种多个多对多关系?
How to seed multiple many-to-many relationships with different pivot data in laravel 8?
我知道我可以使用 hasAttached
方法来 create many-to-many relationships with pivot data in Laravel 8:
Meal::factory()
->count(3)
->hasAttached(Ingredient::factory()->count(3), ['gram' => 100])
->create();
有没有任何方便的 way(除了编写自定义的 for 循环)用每个随机数据为枢轴 table 播种附加条目? 我希望 'gram'
是每个已创建关系的随机数。我尝试了以下但 rand
表达式只被评估一次并用每个关系的相同条目填充枢轴 table:
Meal::factory()
->count(3)
->hasAttached(Ingredient::factory()->count(3), ['gram' => rand(1,100]) //not working
->create();
编辑:我基本上是想实现
for ($i = 1; $i <= 3; $i++) {
$meal = Meal::factory()->create();
for ($j = 1; $j <= 3; $j++) {
$ingredient = Ingredient::factory()->create();
$meal->ingredients()->save($ingredient, ['gram' => rand(5, 250)]);
}
}
使用 Laravel 流畅的工厂方法。
当您调用这样的方法时 method(rand(1,100))
rand
会在调用之前进行评估。这将与 method(59)
相同
幸运的是,Laravel 允许您在每次调用时使用回调 re-evaluate 参数,
Meal::factory()
->count(3)
->hasAttached(Ingredient::factory()->count(3), fn => ['gram' => rand(1,100)])
->create();
如果您使用低于 7.4 的 PHP 版本,您将无法使用箭头功能,您将不得不这样做
Meal::factory()
->count(3)
->hasAttached(Ingredient::factory()->count(3), function () {
return ['gram' => rand(1,100)];
})
->create();
我知道我可以使用 hasAttached
方法来 create many-to-many relationships with pivot data in Laravel 8:
Meal::factory()
->count(3)
->hasAttached(Ingredient::factory()->count(3), ['gram' => 100])
->create();
有没有任何方便的 way(除了编写自定义的 for 循环)用每个随机数据为枢轴 table 播种附加条目? 我希望 'gram'
是每个已创建关系的随机数。我尝试了以下但 rand
表达式只被评估一次并用每个关系的相同条目填充枢轴 table:
Meal::factory()
->count(3)
->hasAttached(Ingredient::factory()->count(3), ['gram' => rand(1,100]) //not working
->create();
编辑:我基本上是想实现
for ($i = 1; $i <= 3; $i++) {
$meal = Meal::factory()->create();
for ($j = 1; $j <= 3; $j++) {
$ingredient = Ingredient::factory()->create();
$meal->ingredients()->save($ingredient, ['gram' => rand(5, 250)]);
}
}
使用 Laravel 流畅的工厂方法。
当您调用这样的方法时 method(rand(1,100))
rand
会在调用之前进行评估。这将与 method(59)
幸运的是,Laravel 允许您在每次调用时使用回调 re-evaluate 参数,
Meal::factory()
->count(3)
->hasAttached(Ingredient::factory()->count(3), fn => ['gram' => rand(1,100)])
->create();
如果您使用低于 7.4 的 PHP 版本,您将无法使用箭头功能,您将不得不这样做
Meal::factory()
->count(3)
->hasAttached(Ingredient::factory()->count(3), function () {
return ['gram' => rand(1,100)];
})
->create();