在Laravel中,如何从用户表中检索一个随机的user_id,以便用于模型工厂种子数据生成?
在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日
任何继承了Illuminate\Database\Eloquent\Model
的类,都能够进行以下操作:
User::inRandomOrder()->first()
或者获取一个包含3个项目的集合:
User::inRandomOrder()->limit(3)->get()
这比使用User::all()->first()
更为有效,后者需要首先查询所有用户。
你的IDE(如PhpStorm)可能会对此选项感到困惑。
还请参阅:Laravel - Eloquent or Fluent random row
尝试下面的内容。
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
如果您在数据库中设置了测试用户,则可以避免获取所有用户数据。