在Laravel中,如何从用户表中检索一个随机的user_id,以便用于模型工厂种子数据生成?

24 浏览
0 Comments

在Laravel中,如何从用户表中检索一个随机的user_id,以便用于模型工厂种子数据生成?

目前,在我的 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 并插入到数据库中。谢谢!:)

admin 更改状态以发布 2023年5月24日
0
0 Comments

任何继承了Illuminate\Database\Eloquent\Model的类,都能够进行以下操作:

User::inRandomOrder()->first()


或者获取一个包含3个项目的集合:

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


这比使用User::all()->first()更为有效,后者需要首先查询所有用户。
你的IDE(如PhpStorm)可能会对此选项感到困惑。
还请参阅:Laravel - Eloquent or Fluent random row

0
0 Comments

尝试下面的内容。

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 分配给上述工厂生成的回复对象。

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

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

如果您在数据库中设置了测试用户,则可以避免获取所有用户数据。

0