php - laravel 数据库播种机添加随机添加外键 ID 到种子

标签 php laravel laravel-seeding

我正在尝试创建用于测试目的的播种机。我有通过房间 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/

相关文章:

php - Laravel:为什么数据库 Seeder 在我的快速电脑上如此慢

php - 我的脚本一直将 "your logged in"放在左上角的框中

php - 使用 HTML 在 PHP 中对齐 3 个元素

php - @return 标记是否对返回类型声明无用

mysql - 在 Laravel 的 Eloquent 或普通 SQL 中计数点

javascript - VueJS react 性在 Blade 部分内不起作用

php - 带有大括号的类似数组的语句 - 目的是什么?

Laravel 无法与主机 smtp.office365.com 建立连接

php - Lumen 数据库播种错误

php - Laravel 数据库播种器,设置特定值 laravel 5