我正在尝试创建用于测试目的的播种机。我有通过房间 ID 属于某个房间的用户,这些房间是通过房间播种机创建的,在我的用户播种机中,我创建了一个用户并像这样更新 room_id 属性,
factory(App\User::class, 150)->create([
'host' => false,
'room_id' => App\Room::inRandomOrder()->first()->id
]);
我的问题是这里生成的所有用户都获得相同的房间 ID,如何才能真正从数据库中获取随机房间 ID 并在我的播种器中使用它?
最佳答案
我在播种时遇到了同样的问题。问题是,您通过传递一组“值”来覆盖工厂的默认模型属性。您正在将 App\Room::inRandomOrder()->first()->id
的值传递给 create
方法。因此,所有用户都具有相同的 room_id
。
要解决此问题,在 laravel 8 中,您可以将 'room_id' => Room::inRandomOrder()->first()->id
移动到您的 UsersFactory
定义:
class UsersFactory {
...
public function definition()
{
return [
'room_id' => Room::inRandomOrder()->first()->id
];
}
...
}
然后像这样创建用户,
App\User::factory()->count(150)->create([
'host' => false
]);
在旧版本的 laravel 中,定义你的工厂如下:
$factory->define(App\User::class, function ($faker) use ($factory) {
return [
'room_id' => Room::inRandomOrder()->first()->id
];
});
然后像这样创建用户,
factory(App\User::class, 150)->create([
'host' => false,
]);
关于php - laravel 数据库播种机添加随机添加外键 ID 到种子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58392664/