php - laravel 数据库播种器添加随机添加外键 id 到种子
问题描述
我正在尝试为测试目的创建播种机。我有通过房间 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,
]);
推荐阅读
- r - 根据逐行值连接列名
- python - exec ${PERL-perl} -Sx $0 ${1+"$@"} 在Shell脚本中是什么意思?
- c# - ASP.Net Core 中是否已经定义了 application/json-patch+json 的常量?
- ruby - Ruby:别名意外指向别名方法的父类实现?
- java - Spring Boot 不从 thymeleaf 返回值
- reactjs - 一定时间后隐藏反应工具提示
- python - 从 .txt 文件导入时间戳
- django - Django+Nginx+Gunicorn : [error] 2194#2194: *15 上游过早关闭连接,同时从上游读取响应头
- python - 将结果导出到 CSV 文件
- java - Jsoup - 来自网站的表格数据排列