Sim*_*Suh 7 php database model seed laravel
目前,在我的ModelFactory.php中,我有:
$factory->define(App\Reply::class, function (Faker\Generator $faker) {
return [
'thread_id' => 1,
'user_id' => 1,
'body' => $faker->paragraph
];
});
Run Code Online (Sandbox Code Playgroud)
我想从已经存储在用户表中的一个用户ID生成一个随机user_id.我很难过,因为我不知道如何正确显示数据输出到代码,我想知道如何让Laravel选择随机用户ID并插入数据库.谢谢!:)
小智 24
试试下面的内容.
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()->user_id,
'body' => $faker->paragraph
];
});
Run Code Online (Sandbox Code Playgroud)
请记住,这会从您的表中获取所有用户数据,然后随机选择一个id.因此,如果您的表有大量数据,则不建议使用.相反,在您的测试用例中,您可以创建一个新用户(通过自己的工厂)并将id分配给从上述工厂生成的Reply对象.
或者,您可以在上面的工厂定义中查询特定用户.
'user_id' => User::where('username', 'like', 'test@user.com')->get()->random()->user_id
Run Code Online (Sandbox Code Playgroud)
如果您在数据库中设置了测试用户,则将避免提取所有用户数据.
任何扩展的类Illuminate\Database\Eloquent\Model都可以这样做:
User::inRandomOrder()->first()
Run Code Online (Sandbox Code Playgroud)
或获取 3 个项目的集合:
User::inRandomOrder()->limit(3)->get()
Run Code Online (Sandbox Code Playgroud)
这可能比 using 更有效User::all()->first(),后者应该首先查询所有用户。
您的 IDE(如 PhpStorm)可能会非常困惑,认为这是一个选项。
另请参阅:Laravel - Eloquent 或 Fluent 随机行
它不像“user_id”那样工作:
User::all()->random()->user_id
Run Code Online (Sandbox Code Playgroud)
但这就是它的工作原理:
User::all()->random()->id
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7570 次 |
| 最近记录: |