当使用内置的 Laravel 7 功能创建用户时,我boot()在我的 User 模型上调用该方法,以便为新用户分配 UUID。我遇到的问题是,由于某种原因,启动方法 get 总共调用了 4 次,导致在 S3 上创建了 4 个不同的目录。应用程序/用户.php/** * Create the user when this class is called * * @return void */protected static function boot(){ // Setup parent parent::boot(); // Create UUID $uuid = Str::uuid(); // Create user directory on S3 Storage::disk('s3')->makeDirectory('users/' . $uuid); // Assign UUID to new user self::creating(function ($model) use ($uuid) { $model->id = $uuid; });}这是在创建时向用户添加字段的正确方法吗?我尝试使用该RegisterController.php -> create()方法添加它,但它不会向用户添加任何内容,并导致错误提示 ID 需要默认值。
1 回答
慕容森
TA贡献1853条经验 获得超18个赞
每当要创建对象时都会调用 boot 方法(不仅仅是持久化,这creating将是做什么的)。每当 Laravel 使用 Auth 函数时,都会发生这种情况,例如,获取当前用户,因此需要多次调用来引导。
parent::boot()您应该将所有内容放在创建闭包内的引导中(除了调用):
protected static function boot()
{
// Setup parent
parent::boot();
self::creating(function ($model) {
// Create UUID
$uuid = Str::uuid();
// Create user directory on S3
Storage::disk('s3')->makeDirectory('users/' . $uuid);
$model->id = $uuid;
});
}
不再需要use ($uuid)on 功能。
- 1 回答
- 0 关注
- 67 浏览
添加回答
举报
0/150
提交
取消