在Laravel中,如何从 Users 表中检索随机user_id以生成模型工厂种子数据?

2022-08-30 15:05:23

目前,在我的ModelFactory.php,我有:

$factory->define(App\Reply::class, function (Faker\Generator $faker) {
  return [
    'thread_id' => 1,
    'user_id' => 1,
    'body' => $faker->paragraph
  ];
});

我想从已经存储在用户表中的用户ID之一生成一个随机user_id。我很困惑,因为我不知道如何正确显示数据输出以编码,我想知道如何允许Laravel选择随机用户ID并插入到数据库中。谢谢!:)


答案 1

请尝试以下操作。

use App\User; // Assuming this is your User Model class with namespace.

$factory->define(App\Reply::class, function (Faker\Generator $faker) {
  return [
    'thread_id' => 1,
    'user_id' => User::all()->random()->id,
    'body' => $faker->paragraph
  ];
});

请记住,这会从您的表格中获取所有用户数据,然后随机选择一个 ID。因此,如果您的表包含大量数据,则不建议这样做。相反,在测试用例中,您可以创建一个新用户(通过其自己的工厂),并将 id 分配给从上述工厂生成的 Reply 对象。

或者,您可以在上述工厂定义中查询特定用户。

'user_id' => User::where('username', 'like', 'test@user.com')->get()->random()->id

如果您在数据库中设置了测试用户,这将避免提取所有用户数据。


答案 2

任何扩展的类都能够执行以下操作:Illuminate\Database\Eloquent\Model

User::inRandomOrder()->first()

或者要获得3件物品的集合:

User::inRandomOrder()->limit(3)->get()

这可能比使用 更有效,后者应该首先查询所有用户。User::all()->first()

你的IDE(像PhpStorm)可能会非常困惑,认为这是一个选项。

另请参阅:Laravel - 口才或流利的随机行


推荐